次の方法で共有


深度バッファーサポートのクエリ (Direct3D 9)

他の機能と同様に、アプリケーションで使用されるドライバーでは、すべての種類の深度バッファリングがサポートされていない可能性があります。 ドライバーの機能を常にチェックします。 ほとんどのドライバーは z ベースの深度バッファリングをサポートしていますが、すべてでは w ベースの深度バッファリングがサポートされるわけではありません。 サポートされていないスキームを有効にしようとすると、ドライバーは失敗しません。 代わりに別の深度バッファリングメソッドにフォールバックしたり、深度バッファリングを完全に無効にしたりします。これにより、シーンが極端な深度並べ替えアーティファクトでレンダリングされる可能性があります。

Direct3D デバイスを作成する前に、アプリケーションで使用するディスプレイ デバイスに対して Direct3D に対してクエリを実行することで、深度バッファーの一般的なサポートをチェックできます。 Direct3D オブジェクトが深度バッファリングをサポートしていると報告した場合、この Direct3D オブジェクトから作成するすべてのハードウェア デバイスで z バッファリングがサポートされます。

深度バッファリングのサポートを照会するには、次のコード例に示すように、 IDirect3D9::CheckDeviceFormat メソッドを使用します。

// The following example assumes that pCaps is a valid pointer to an 
// initialized D3DCAPS9 structure
if(FAILED(m_pD3D->CheckDeviceFormat(pCaps->AdapterOrdinal, 
                                    pCaps->DeviceType, 
                                    AdapterFormat, 
                                    D3DUSAGE_DEPTHSTENCIL, 
                                    D3DRTYPE_SURFACE,
                                    D3DFMT_D16)))
    return E_FAIL;

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

次のコード例では、 IDirect3D9::CheckDepthStencilMatch を使用してレンダー ターゲットとの深度ステンシルの互換性を判断します。

// Reject devices that cannot create a render target of RTFormat while
// the back buffer is of RTFormat and the depth-stencil buffer is
// at least 8 bits of stencil
if(FAILED(m_pD3D->CheckDepthStencilMatch(pCaps->AdapterOrdinal,
                                        pCaps->DeviceType, 
                                        AdapterFormat, 
                                        RTFormat, 
                                        D3DFMT_D24S8)))
    return E_FAIL;

ドライバーが深度バッファーをサポートしていることがわかっている場合は、w バッファーのサポートを確認できます。 深度バッファーはすべてのソフトウェア ラスタライザーでサポートされていますが、w バッファーは参照ラスタライザーでのみサポートされており、実際のアプリケーションでの使用には適していません。 アプリケーションで使用するデバイスの種類に関係なく、w ベースの深度バッファリングを有効にする前に、w バッファーのサポートを確認してください。

  1. デバイスを作成したら、 IDirect3DDevice9::GetDeviceCaps メソッドを呼び出し、初期化された D3DCAPS9 構造体を渡します。
  2. 呼び出し後、LineCaps メンバーには、ドライバーによるレンダリング プリミティブのサポートに関する情報が含まれます。
  3. この構造体の RasterCaps メンバーに D3DPRASTERCAPS_WBUFFER フラグが含まれている場合、ドライバーはそのプリミティブ型の w ベースの深度バッファリングをサポートします。

深度バッファー