Win32 API 日本語リファレンス
ホーム › Devices.Display › PFN_DrvAlphaBlend

PFN_DrvAlphaBlend

コールバック

シグネチャ

BOOL PFN_DrvAlphaBlend(
    SURFOBJ* param0,
    SURFOBJ* param1,
    CLIPOBJ* param2,
    XLATEOBJ* param3,
    RECTL* param4,
    RECTL* param5,
    BLENDOBJ* param6
);

パラメーター

フィールド型
param0SURFOBJ*
param1SURFOBJ*
param2CLIPOBJ*
param3XLATEOBJ*
param4RECTL*
param5RECTL*
param6BLENDOBJ*

公式ドキュメント

DrvAlphaBlend 関数は、アルファブレンディングを伴うビットブロック転送の機能を提供します。

戻り値

DrvAlphaBlend は、成功すると TRUE を返します。それ以外の場合は、エラーを報告して FALSE を返します。

解説(Remarks)

ドライバーは、次のサーフェス間でアルファブレンディングを伴うビットブロック転送をサポートできます。

ドライバーは、呼び出しを EngAlphaBlend に委ねる (punt する) ことができます。

同じサーフェス上で転送元と転送先の四角形が重なった状態でドライバーが呼び出されることはありません。

AC_SRC_OVER ブレンド関数で起こり得るケースは、次の 3 つです。

Round(x) 関数は、最も近い整数に丸めます。計算方法は次のとおりです。
Trunc(x + 0.5);

DrvAlphaBlend は、グラフィックスドライバーで任意に実装できます。転送元サーフェスと転送先サーフェスが同じ形式でアルファチャネルを含まないブレンドなど、一部の種類のアルファブレンドを処理するために提供できます。

ハードウェア実装では、ブレンド演算に浮動小数点または固定小数点を使用できます。互換性テストでは結果に含まれる多少の数値誤差が考慮されます。許容される最大誤差については、Special Effects in Display Drivers を参照してください。固定小数点を使用する場合、x/255 という項に対する許容可能な近似は (x*257)/65536 です。丸めを組み込むと、次の式:

((255 - Src.Alpha) * Dst.Red) / 255

は、次のように近似できます。

temp = ((255 - Src.Alpha) * Dst.Red) + 128;
result = (temp + (temp >> 8)) >> 8;

ドライバーは、EngAssociateSurface を呼び出すときに HOOK_ALPHABLEND フラグを設定して、DrvAlphaBlend をフックします。ドライバーが DrvAlphaBlend をフックしていて、サポートしていない操作の実行を求められた場合は、EngAlphaBlend の呼び出しにデータを委ねて、GDI にその操作を処理させる必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)