Platform SDK: DirectX |
IDirectDrawSurface7::Blt メソッドを使用する場合、転送元サーフェス (または、サーフェスすべてを指定する NULL) の有効な矩形、およびコピーされる転送元イメージへの転送先サーフェスの矩形を与える (NULL は、サーフェスすべてをカバーすることを意味する)。クリッパーが転送先サーフェスにアタッチされる場合、転送先矩形の境界はサーフェスの外側に配置でき、クリッピングが実行される。クリッパーのない場合は、転送先矩形がサーフェスの内側に完全に配置されるか、他のメソッドが DDERR_INVALIDRECT で失敗する (クリッピングの詳細については、「クリッパー」を参照すること)。
スケーリング
Blt メソッドは、転送元イメージのサイズを転送先矩形と適合するように自動的に再スケーリングする。サイズの再スケーリングをしたくない場合は、最良のパフォーマンスのために、転送元および転送先矩形が正確に同じサイズであることを確認するか、IDirectDrawSurface7:BltFast を使用する (「BltFast によるブリット」を参照すること)。
スケーリングに対するハードウェア アクセラレータは、デバイスに対する DDCAPS 構造体の dwFXCaps メンバの DDFXCAPS_BLT* フラグに依存する。たとえば、デバイスに DDFXCAPS_BLTSTRETCHX ではなく DDFXCAPS_BLTSTRETCHXN 能力がある場合、転送元矩形の x 軸が整数倍のときはアシストできるが、整数倍以外の (任意の) スケーリングがなされているときはアシストできない。
また、デバイスでは、ピクセルの単純な掛け算や削除よりも、補間によりスケーリングを行う算術スケーリングをサポートする場合がある。たとえば、軸が 1/3 増加する場合、ピクセルは塗り直され、その軸の 1/3 ピクセルごとの増加により生成される元のイメージにより近い近似値が与えられる。
アプリケーションは、Blt に渡される DDBLTFX 構造体の dwDDFX メンバにある DDBLTFX_ARITHSTRETCHY フラグの設定以外は、ドライバによるスケーリングのタイプを制御できない。このフラグは、y 軸で算術伸縮を行うことを要求する。DirectDraw API では、x 軸の算術拡大と算術縮小は現在サポートしていないが、ドライバはデフォルトでこれらを実行できる。
他のエフェクト
Blt を使用する際、スケーリング以外の特定のエフェクトを必要としない場合は、lpDDBltFx パラメータとして NULL を渡すことができる。それ以外は、DDBLTFX 構造体で指定される様々なエフェクトを選択できる。また同時に、HEL がカラー フィルとミラーリングをサポートするので、これらは常に利用できる。他の大部分のエフェクトはハードウェア サポートによる。
HEL のエフェクト能力をすべて見るには、DirectX SDK で提供される DDraw Caps ユーティリティを実行し、HEL メニューから HEL FX Caps を選択する。様々なフラグの説明は、「DDCAPS」を参照すること。また、IDirectDraw7::GetCaps メソッドを使用して、各自のアプリケーションにおける HEL 能力もチェックできる。
IDirectDrawSurface7::Blt メソッドに渡される DDBLTFX 構造体にあるメンバの 1 つの値を要求するエフェクトを指定する場合、構造体のメンバが有効であることを示す適切なフラグも dwFlags パラメータに含まなくてはならない。
DDBLTFX の dwFlags メンバにおけるフラグの設定だけを要求するエフェクトもある。このうちの 1 つは DDBLTFX_NOTEARING である。このフラグは、アニメーションされたイメージをフロント バッファに直接ブリットするときに使用できるため、ブリットはスクリーン リフレッシュおよびテアリングの可能性と同時に発生できる。また、ミラーリングと回転もフラグを使用して設定される。
ブリット エフェクトには、BitBlt のような GDI 関数で使用される一般的なラスタ処理 (ROP) が含まれる。HEL がサポートする ROP は SRCCOPY (デフォルト)、BLACKNESS、および WHITENESS だけである。他の ROP をサポートするハードウェアは、ドライバに対する DDCAPS 構造体で試すことができる。Blt メソッドと共に標準的なあらゆる ROP を使用したい場合は、DDBLTFX 構造体の dwROP メンバの ROP にフラグを立てる。
DDBLTFX 構造体の dwDDROP メンバは、ROP の特質を DirectDraw に指定するためにある。しかし、現時点で定義されている ROP はない。
アルファ値と Z 値
DirectDraw ブリットでは、不透明度と深度値を現時点ではサポートしていない。アルファ値がピクセル フォーマットに格納される場合、アルファ値は転送先矩形のあらゆるアルファ値に単にオーバーライトする。アルファ バッファと Z バッファからの値は無視される。アルファ チャネル と Z バッファ ("dwAlpha" と "dwZ" で始まる名前のメンバ) で行う DDBLTFX 構造体のメンバ、および Blt に対応するフラグは使用されない。そして、DDBLTFX 構造体の dwDDFX メンバの DDBLTFX_ZBUFFERBASEDEST および DDBLTFX_ZBUFFERRANGE フラグに提供する。
現時点では、Z バッファは Direct3D アプリケーションでしか使用されないが、IDirectDrawSurface7::Blt を使用して DDBLT_DEPTHFILL フラグを設定することにより、Z バッファ サーフェスの深度値を設定できる。詳細については、Direct3D 直接モードの「深度バッファのクリア」を参照すること。
Direct3D のアルファ チャネルおよび Z バッファの使用については、次の項目を参照すること。
Blt の例
次に示す例では、lpDDS が有効な IDirectDrawSurface7 ポインタであると仮定して、左から右に矩形をミラーリングすることによりサーフェス内に左右対称のイメージを作成する。
RECT rcSource, rcDest; DDBLTFX ddbltfx; ZeroMemory(&ddbltfx, sizeof(ddbltfx)); ddbltfx.dwSize = sizeof(ddbltfx); ddbltfx.dwDDFX = DDBLTFX_MIRRORLEFTRIGHT; rcSource.top = 0; rcSource.left = 0; rcSource.bottom = 100; rcSource.right = 200; rcDest.top = 0; rcDest.left = 201; rcDest.bottom = 100; rcDest.right = 401; HRESULT hr = lpDDS->Blt(&rcDest, lpDDS, &rcSource, DDBLT_WAIT | DDBLT_DDFX, &ddbltfx);
DirectDrawSurface7.Blt メソッドを使用する場合、転送元サーフェス (またはサーフェスすべてを指定する空の RECT) の有効な矩形、およびコピーされる転送元イメージへの転送先サーフェスの矩形を与えることができる (空の RECT は、サーフェスすべてをカバーすることを意味する)。クリッパーが転送先サーフェスにアタッチされる場合、転送先矩形の境界はサーフェスの外側に配置でき、クリッピングが実行される。クリッパーのない場合は、転送先矩形がサーフェスの内側に完全に配置されるか、他のメソッドが DDERR_INVALIDRECT で失敗する。(クリッピングについては、「クリッパー」を参照すること)。
スケーリング
Blt メソッドは、転送元イメージのサイズを転送先矩形と適合するように自動的に再スケーリングする。サイズの再スケーリングをしたくない場合は、最良のパフォーマンスのために、転送元および転送先矩形が正確に同じサイズであることを確認するか、DirectDrawSurface7.BltFast を使用する (「BltFast によるブリット」を参照すること)。
スケーリングに対するハードウェア アクセラレータは、デバイスに対する DDCAPS 型の lFXCaps メンバの DDFXCAPS_BLT* フラグに依存する。たとえば、デバイスに DDFXCAPS_BLTSTRETCHX ではなく DDFXCAPS_BLTSTRETCHXN 能力がある場合、転送元矩形の x 軸が整数倍のときはアシストできるが、整数倍以外の (任意の) スケーリングがなされているときはアシストできない。
また、デバイスでは、ピクセルの単純な掛け算や削除よりも、補間によりスケーリングを行う算術スケーリングをサポートする場合がある。たとえば、軸が 1/3 倍に増加する場合、ピクセルは塗り直され、その軸の 1/3 ピクセルごとの増加により生成される元のイメージにより近い近似値が与えられる。
アプリケーションは、Blt に渡される DDBLTFX 型の lDDFX メンバにある DDBLTFX_ARITHSTRETCHY フラグの設定以外は、ドライバによるスケーリングのタイプを制御できない。このフラグは、y 軸で算術伸縮を行うことを要求する。DirectDraw API では、x 軸の算術拡大と算術縮小は現在サポートしていないが、ドライバはデフォルトでこれらを実行できる。
他のエフェクト
スケーリング以外の特定のエフェクトを必要としない場合は、DirectDrawSurface7.BltFx メソッドを使用する。このメソッドでは、DDBLTFX 型で指定される様々なエフェクトを選択できる。また同時に、HEL がカラー フィルとミラーリングをサポートするので、これらは常に利用できる。他の大部分のエフェクトはハードウェア サポートによる。
HEL のエフェクト能力をすべて見るには、DirectX SDK で提供される Ddraw Caps ユーティリティを実行し、HEL メニューから HEL FX Caps を選択する。様々なフラグの説明は、「DDCAPS」を参照すること。また、DirectDraw7.GetCaps メソッドを使用して、各自のアプリケーションにおける HEL 能力もチェックできる。
DirectDrawSurface7.BltFx メソッドに渡される DDBLTFX 型にあるメンバの 1 つの値を要求するエフェクトを指定する場合、型のメンバが有効であることを示す適切なフラグも flags パラメータに含まなくてはならない。
DDBLTFX の IDDFX メンバにおけるフラグの設定だけを要求するエフェクトもある。このうちの 1 つは DDBLTFX_NOTEARING である。このフラグは、アニメーションされたイメージをフロント バッファに直接ブリットするときに使用できるため、ブリットはスクリーン リフレッシュおよびテアリングの可能性と同時に発生できる。また、ミラーリングと回転もフラグを使用して設定される。
ブリット エフェクトには、BitBlt のような GDI 関数で使用される一般的なラスタ処理 (ROP) が含まれる。HEL がサポートする ROP は SRCCOPY (デフォルト)、BLACKNESS、および WHITENESS だけである。他の ROP をサポートするハードウェアは、ドライバに対する DDCAPS 型で試すことができる。Blt メソッドと共に標準的なあらゆる ROP を使用したい場合は、DDBLTFX 型の IROP メンバの ROP にフラグを立てる。
DDBLTFX 型の IDDROP メンバは、ROP の特質を DirectDraw に指定するためにある。しかし、現時点で定義されている ROP はない。
アルファ値と Z 値
DirectDraw ブリットでは、不透明度と深度値を現時点ではサポートしていない。アルファ値がピクセル フォーマットに格納される場合、アルファ値は転送先矩形のあらゆるアルファ値に単にオーバーライトする。アルファ バッファと Z バッファからの値は無視される。アルファ チャネルと Z バッファ ("lAlpha" と "lZ" で始まる名前のメンバ) で行う DDBLTFX 型のメンバ、および Blt に対応するフラグは使用されない。そして、DDBLTFX 型の lDDFX メンバの DDBLTFX_ZBUFFERBASEDEST および DDBLTFX_ZBUFFERRANGE フラグに提供する。
現時点では、Z バッファは Direct3D アプリケーションでしか使用されないが、IDirectDrawSurface7.Blt を使用して DDBLT_DEPTHFILL フラグを設定することにより、Z バッファ サーフェスの深度値を設定できる。詳細については、Direct3D 直接モードの「深度バッファのクリア」を参照すること。
Direct3D のアルファ チャネルおよび Z バッファの使用については、次の項目を参照すること。
Blt の例
次に示す例では、DDS が有効な DirectDrawSurface7 オブジェクトであると仮定して、左から右に矩形をミラーリングすることによりサーフェス内に左右対称のイメージを作成する。
rcSource As RECT rcDest As RECT ddbltfx As ddbltfx ddbltfx.lDDFX = DDBLTFX_MIRRORLEFTRIGHT rcSource.Top = 0 rcSource.Left = 0 rcSource.Bottom = 100 rcSource.Right = 200 rcDest.Top = 0 rcDest.Left = 201 rcDest.Bottom = 100 rcDest.Right = 401 dds.BltFx rcDest, dds, rcSource, DDBLT_WAIT Or DDBLT_DDFX, ddbltfx