DXGK_GDIARG_TRANSPARENTBLT 構造体 (d3dkmddi.h)

DXGK_GDIARG_TRANSPARENTBLT構造体は、GDI ハードウェア高速ビット ブロック転送 (ビットブレット) 操作の特性を透過性と共に記述します。

構文

typedef struct _DXGK_GDIARG_TRANSPARENTBLT {
  [in] RECT                      SrcRect;
  [in] RECT                      DstRect;
       UINT                      SrcAllocationIndex;
       UINT                      DstAllocationIndex;
       UINT                      Color;
       UINT                      NumSubRects;
       RECT                      *pSubRects;
       D3DKM_TRANSPARENTBLTFLAGS Flags;
       UINT                      SrcPitch;
} DXGK_GDIARG_TRANSPARENTBLT;

メンバー

[in] SrcRect

コピーする四角形の領域を定義する RECT 構造体。 この四角形は、ソース サーフェスの座標系で指定され、左上と右下の 2 つの点で定義されます。 四角形を定義する 2 つの点は、常に適切に並べ替えられます。

詳細については、「解説」を参照してください。

[in] DstRect

変更する四角形領域を定義する RECT 構造体。 この四角形は、変換先サーフェスの座標系で指定され、左上と右下の 2 つの点で定義されます。 四角形は右下の排他的です。つまり、その下端と右端は、ビット ブロック転送の一部ではありません。 四角形を定義する 2 つの点は、常に適切に並べ替えられます。

DstRect によって定義された変換先の四角形は、変換先のサーフェスの境界を超えることができますが、サブ四角形を使用することはできません。 さらに、すべてのサブ四角形がターゲット サーフェス内に収まることが保証されます。 サブ四角形は、移動先の四角形よりも小さい外接する四角形によってさらに制約できます。

詳細については、「解説」を参照してください。

SrcAllocationIndex

[入力] SrcRect ソース四角形によって参照される割り当てを指定する、割り当てリスト内の要素のインデックス。

DstAllocationIndex

[入力] DstRect 変換先の四角形によって参照される割り当てを指定する割り当てリスト内の要素のインデックス。

Color

[入力]ソース サーフェイスの物理的な透明色を 32 ビット ARGB 符号なしピクセル形式で指定します ( D3DDDIFORMAT 列挙のD3DDDIFMT_A8R8G8B8値で定義されます)。 [色] で指定された透明色に一致するソース サーフェス上のピクセルはコピーされません。

NumSubRects

[入力] DstRect 変換先の四角形で囲まれた、移動先のサーフェス空間内のサブ四角形の数。

pSubRects

[入力]移動先のサーフェス空間内のサブ四角形へのポインター。

Flags

[入力]ディスプレイ アダプターのハードウェアアクセラレータ透過的ビット ブロック転送機能を指定する D3DKM_TRANSPARENTBLTFLAGS 構造体。

SrcPitch

[入力]ソース サーフェスのピッチ (バイト単位)。

注釈

SrcRect メンバーと DstRect メンバーによって指定された四角形は、それぞれ、ソースサーフェス空間と変換先サーフェススペース内のすべてのサブ四角形をバインドしました。 ソースと宛先の四角形が同じサーフェス上で重なっている場合、Microsoft DirectX グラフィックス カーネル サブシステムは透過的なビット ブロック転送を要求しません。

透過的なビット ブロック転送操作を完了するには、 DstRect の各ピクセルの色を次の式を使用して計算する必要があります。

typedef DXGK_GDIARG_TRANSPARENTBLT tblt;
if (tblt.Flags.HonorAlpha)
{
  if (SourceColor != tblt.Color)
 {
  DestinationColor = SourceColor; 
 }
}
else
{
 if ((SourceColor & 0x00FFFFFF) != tblt.Color)
 {
  DestinationColor = SourceColor; 
 }
}

この場合、ARGB 形式の 0x00FFFFFF の値は alpha = 0 を示しているため、アルファ ブレンドは実装されません。

ストレッチ ビット ブロック転送操作が必要な場合、x と y のストレッチ比率は、 DstRectSrcRect の x サイズと y サイズの比率としてそれぞれ計算されます。 さらに、ストレッチ操作は Wingdi.h の COLORONCOLOR 値が設定されているかのように続行されます。 縮小ビット ブロック転送では、ピクセルを結合する必要がないように、十分なピクセルを無視する必要があります。 ストレッチ ビット ブロック転送では、ピクセルをレプリケートする必要があります。

透過的なビット ブロック転送の詳細については、「 ビットマップのコピー」を参照してください。

サブ四角形がソースサーフェス空間に変換されると、結果はソースサーフェス内であることが保証されます。 変換先サーフェス内のサブ四角形の座標からソース サーフェス内の座標への変換は、次の数式で定義されます。

  • (Xd、Yd) はサブ四角形内のポイントです
  • (Xs、Ys) は、ソース四角形内のポイントです
float Ws = SrcRect.right - SrcRect.left;
float Wd = DstRect.right - DstRect.left;
int Xs = round((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left - 0.5)
OR
int Xs = truncate((Xd - DstRect.left + 0.5) * Ws/Wd + SrcRect.left)

float Hs = SrcRect.bottom - SrcRect.top;
float Hd = DstRect.bottom - DstRect.top;
int Ys = round((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top - 0.5)
OR
int Ys = truncate((Yd - DstRect.top + 0.5) * Hs/Hd + SrcRect.top)

要件

要件
サポートされている最小のクライアント Windows 7
Header d3dkmddi.h (D3dkmddi.h を含む)

こちらもご覧ください

D3DDDIFORMAT

D3DKM_TRANSPARENTBLTFLAGS

DXGK_RENDERKM_COMMAND

Rect