Microsoft DirectX 8.0 (Visual Basic)

深度バッファのサポート状況の問い合わせ

ほかの機能でも同様だが、アプリケーションで使用するドライバがあらゆる種類の深度バッファリングをサポートしているとは限らない。常にドライバの機能を調べる必要がある。z ベースの深度バッファリングはほとんどのデバイスでサポートされているが、w ベースの深度バッファリングは一部のデバイスでしかサポートされていない。サポートされていないスキームを有効にしても、ドライバは失敗しない。ドライバは別の深度バッファリングに頼ったり、場合によってはすべての深度バッファリングを無効にし、その結果、レンダリング後のシーンに深度ソートによる不自然な効果が現れることがある。

Direct3D デバイスを作成する前にアプリケーションで使用するディスプレイ デバイスについて Microsoft® Direct3D® に問い合わせることで、深度バッファのサポートを調べることができる。Direct3D オブジェクトから深度バッファリングをサポートしているとの報告があれば、この Direct3D オブジェクトから作成するハードウェア デバイスは z バッファリングをサポートする。

Visual Basic アプリケーションで一般的な深度バッファリングのサポート状況を照会するには

深度バッファリングのサポート状況を問い合わせるには、Direct3D8.CheckDeviceFormat メソッドを使用する。次のコードは、その例を示している。

' 次の例では、g_D3D、AdapterOrdinal、DeviceType、
' および Format は、正しく初期化された値であると仮定している。
g_D3D.CheckDeviceFormat AdapterOrdinal, DeviceType, Format, _
                        D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, _
                        D3DFMT_D16

CheckDeviceFormat では、該当するデバイスの能力に基づいて、作成するデバイスを選択できる。この場合、16 ビットの深度バッファをサポートしないデバイスは拒否される。

また、Direct3D8.CheckDepthStencilMatch を使用して、サポートされている深度ステンシル フォーマットがディスプレイ モードのレンダリング ターゲットのフォーマットと互換性があるかどうか、特に、深度フォーマットがレンダリング ターゲットのフォーマットと等しいかどうかを調べることができる。

ドライバで深度バッファがサポートされていることがわかったら、次は w バッファのサポート状況を調べることができる。深度バッファはすべてのソフトウェア ラスタライザでサポートされているが、w バッファはリファレンス ラスタライザでしかサポートされていない。これでは、実際のアプリケーションでの使用に適さない。アプリケーションで使用するデバイスがどのような種類でも、w ベース深度バッファリングを有効にする前に、w バッファのサポート状況を調べる必要がある。

Visual Basic アプリケーションで w バッファのサポート状況を調べるには

  1. デバイスを作成した後、Direct3DDevice8.GetDeviceCaps メソッドを呼び出して、初期化された D3DCAPS8 型を渡す。
  2. この呼び出しの後、プリミティブのレンダリングに関するドライバのサポートの情報が LineCaps メンバに入る。
  3. この型の RasterCaps メンバに D3DPRASTERCAPS_WBUFFER フラグが含まれている場合、ドライバは当該のプリミティブ タイプに対する W 深度バッファリングをサポートする。

深度バッファリングの一般情報については、「深度バッファとは」を参照すること。