次の方法で共有


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

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

DstAllocationIndex

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

Color

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

NumSubRects

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

pSubRects

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

Flags

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

SrcPitch

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

備考

SrcRectDstRect メンバーによって指定された四角形は、それぞれ、ソースサーフェス空間と変換先サーフェス空間内のすべてのサブ四角形をバインドしました。 ソースと宛先の四角形が同じサーフェス上で重なっている場合、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の値はアルファ = 0 を示しているため、アルファ ブレンドは実装されません。

ストレッチ ビット ブロック転送操作が必要な場合、x と y のストレッチ比は、DstRect と srcRectの 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
ヘッダー d3dkmddi.h (D3dkmddi.h を含む)

関連項目

D3DDDIFORMAT

D3DKM_TRANSPARENTBLTFLAGS

DXGK_RENDERKM_COMMAND

RECT