深度バッファのサポート状況の問い合わせ
ほかの機能でも同様だが、アプリケーションで使用するドライバが深度バッファリングをサポートしていると決めてかからないこと。常にドライバの機能を調べる必要がある。z ベースの深度バッファリングはほとんどのデバイスでサポートされているが、w ベースの深度バッファリングは一部のデバイスでしかサポートされていない (深度バッファリングの一般情報については、「深度バッファとは」を参照すること)。サポートされていないスキームを有効にしようとすると、ドライバは別の深度バッファリングに頼ったり、場合によってはすべての深度バッファリングを無効にし、その結果、レンダリング後のシーンに深度ソートによる不自然な効果が現れることがある。
Direct3D デバイスを作成する前にアプリケーションで使用するディスプレイ デバイスについて DirectDraw に照会することで、深度バッファのサポートを調べることができる。DirectDraw オブジェクトから深度バッファリングをサポートしているとの報告があれば、この DirectDraw オブジェクトから作成するハードウェア デバイスは z バッファリングをサポートする (しかし、このドライバが w バッファリングをサポートするかどうかはわからない)。
[C++]
C++ で一般的な深度バッファリングのサポート状況を問い合わせるには
- アプリケーションで使用するディスプレイ デバイスに対して、DirectDraw オブジェクトの IDirectDraw7::GetCaps メソッドを呼び出して、初期化した DDCAPS 構造体をパラメータとして渡す。この呼び出しの後、DDCAPS 構造体に DirectDraw のハードウェアおよびエミュレーション機能についての情報が入る。
- 第 1 パラメータとして渡した構造体の ddsCaps メンバを調べる。このメンバ (DDSCAPS2 構造体) に DDSCAPS_ZBUFFER フラグが含まれる場合、このデバイスでは z バッファを利用した深度バッファリングをサポートしている。
[Visual Basic]
Visual Basic で一般的な深度バッファリングのサポート状況を問い合わせるには
- アプリケーションで使用するディスプレイ デバイスに対して、DirectDraw オブジェクトの DirectDraw7.GetCaps メソッドを呼び出して、DDCAPS 型の変数をパラメータとして渡す。この呼び出しの後、DDCAPS 構造体に DirectDraw のハードウェアおよびエミュレーション機能についての情報が入る。
- 第 1 パラメータとして渡した変数の ddsCaps メンバを調べる。このメンバ (DDSCAPS2 型) に DDSCAPS_ZBUFFER フラグが含まれる場合、このデバイスでは z バッファを利用した深度バッファリングをサポートしている。
ドライバで z バッファがサポートされていることが分かったら、次は w バッファのサポート状況を調べることができる。z バッファはすべてのソフトウェア ラスタライザでサポートされているが、w バッファはリファレンス ラスタライザでしかサポートされていない。これでは、実際のアプリケーションではほとんど使用できない。アプリケーションで使用するデバイスがどのような種類でも、w ベース深度バッファリングを有効にする前に、w バッファのサポート状況を調べる必要がある。
[C++]
C++ アプリケーションで w バッファのサポート状況を調べるには
- デバイスを作成した後 (HAL またはエミュレーション)、IDirect3DDevice7::GetCaps メソッドを呼び出して、初期化した D3DDEVICEDESC7 構造体を渡す。
- この呼び出しの後、プリミティブのレンダリングに関するドライバのサポートの情報が dpcTriCaps と dpcLineCaps メンバ (D3DPRIMCAPS 構造体) に入る。
- これらの構造体の dwRasterCaps メンバに D3DPRASTERCAPS_WBUFFER フラグが含まれている場合、ドライバは当該のプリミティブ種類に対する W 深度バッファリングをサポートする。
[Visual Basic]
Visual Basic で w バッファのサポート状況を調べるには
- デバイス (HAL またはエミュレーション) を作成した後、Direct3DDevice7.GetCaps メソッドを呼び出して、D3DDEVICEDESC7 型の変数をパラメータとして渡す。
- この呼び出しの後、dpcTriCaps および dpcLineCaps メンバ (D3DPRIMCAPS 型) に、プリミティブのレンダリングに関するドライバでのサポート情報が入る。
- dpcTriCaps および dpcLineCaps の lRasterCaps メンバに D3DPRASTERCAPS_WBUFFER フラグが含まれている場合、ドライバではそのプリミティブの種類に対して w ベース深度バッファリングをサポートしている。