Platform SDK: DirectX

深度バッファの作成

通常、アプリケーションの起動シーケンス中に深度バッファを作成した後で、レンダリング用に Direct3D デバイス オブジェクトを作成する。次の手順を実行して、深度バッファ サーフェスを作成し、レンダリング ターゲット サーフェスにアタッチする。

[C++]

C++ アプリケーションで深度バッファを作成するには

  1. IDirect3D7::EnumZBufferFormats メソッドを呼び出して、デバイスがサポートする深度バッファ ピクセル フォーマットを判断する。
  2. DDSURFACEDESC2 構造体を準備して、レンダリング ターゲット サーフェスの大きさに適合し、DDSCAPS_ZBUFFER フラグを含み、サポートされる深度バッファ ピクセル フォーマット (ステップ 1 で取得) を使用する DirectDraw サーフェスを記述する。
  3. アプリケーションで使用するレンダリング デバイスの種類に応じて、ビデオ メモリまたはシステム メモリのどちらかにサーフェスを作成する。(「注意」を参照すること。
  4. IDirectDrawSurface7::AddAttachedSurface メソッドを使用して、深度バッファ サーフェスをレンダリング サーフェスにアタッチする。

深度バッファ サーフェスを作成し、レンダリング ターゲット サーフェスにアタッチした後、IDirect3D7::CreateDevice メソッドを呼び出してレンダリング ターゲット サーフェスとその深度バッファを使用するレンダリング デバイスを作成する。

アプリケーションでハードウェア ドライバ (HAL デバイス) を使用するときは、DDSCAPS_VIDEOMEMORY サーフェス機能を利用してビデオ メモリに深度バッファを作成する。ソフトウェア エミュレーション ドライバ (MMX または RGB デバイス) を使用するときは、DDSCAPS_SYSTEMMEMORY サーフェス機能を利用してシステム メモリに深度バッファを作成する。該当する種類のメモリで深度バッファの作成が失敗した場合、CreateDevice メソッドも失敗する。

 :  広く使用されている一部のハードウェアでは、レンダリング ターゲットおよび深度バッファ サーフェスで同じビット深度を使用する必要がある。そのようなハードウェアでは、アプリケーションで 16 ビットのレンダリング ターゲット サーフェスを使用する場合は、アタッチする深度バッファも 16 ビットでなければならない。32 ビットのレンダリング ターゲット サーフェスであれば、32 ビットの深度バッファでなければならない。8 ビットの深度バッファは、必要に応じてステンシル バッファリングに使用できる。

アプリケーションが動作するハードウェアにこのような要件があり、アプリケーションがこれを満たしていない場合、非対応サーフェスを使用するレンダリング デバイスを作成しようとすると失敗する。DirectDraw メソッドの IDirectDraw7::GetDeviceIdentifier を使用して、この制限があるハードウェアを特定できる。

[Visual Basic]

Visual Basic アプリケーションで深度バッファを作成するには

  1. Direct3D7.GetEnumZBufferFormats メソッドを呼び出して、サポートされている深度バッファ フォーマットを列挙できる Direct3DEnumPixelFormats オブジェクトへの参照を取得する。デバイスでサポートされている深度バッファ ピクセル フォーマットについて、この列挙オブジェクに問い合わせる。
  2. DDSURFACEDESC2 型を準備して、レンダリング ターゲット サーフェスの大きさと一致し、DDSCAPS_ZBUFFER フラグを含み、サポートされる深度バッファ ピクセル フォーマット (手順 2 で取得) を使用する DirectDraw サーフェスを記述する。
  3. アプリケーションで使用するレンダリング デバイスの種類に応じて、ビデオ メモリまたはシステム メモリのどちらかにサーフェスを作成する。(「注意」を参照すること。
  4. DirectDrawSurface7.AddAttachedSurface メソッドを使用して、深度バッファ サーフェスをレンダリング サーフェスにアタッチする。

深度バッファ サーフェスを作成し、レンダリング ターゲット サーフェスにアタッチした後、Direct3D7.CreateDevice メソッドを呼び出して、レンダリング ターゲット サーフェスとその深度バッファを使用するレンダリング デバイスを作成する。

アプリケーションでハードウェア ドライバ (HAL デバイス) を使用するときは、DDSCAPS_VIDEOMEMORY サーフェス機能を利用してビデオ メモリに深度バッファを作成する。ソフトウェア エミュレーション ドライバ (MMX または RGB デバイス) を使用するときは、DDSCAPS_SYSTEMMEMORY サーフェス機能を利用してシステム メモリに深度バッファを作成する。該当する種類のメモリで深度バッファの作成が失敗した場合、CreateDevice メソッドも失敗する。

 :  広く使用されている一部のハードウェアでは、レンダリング ターゲットおよび深度バッファ サーフェスで同じビット深度を使用する必要がある。そのようなハードウェアでは、アプリケーションで 16 ビットのレンダリング ターゲット サーフェスを使用する場合は、アタッチする深度バッファも 16 ビットでなければならない。32 ビットのレンダリング ターゲット サーフェスであれば、32 ビットの深度バッファでなければならない。8 ビットの深度バッファは、必要に応じてステンシル バッファリングに使用できる。

アプリケーションが動作するハードウェアにこのような要件があり、アプリケーションがこれを満たしていない場合、非対応サーフェスを使用するレンダリング デバイスを作成しようとすると失敗する。DirectDraw メソッドの DirectDraw7.GetDeviceIdentifier および関連するオブジェクト (DirectDrawIdentifier) を使用して、この制限があるハードウェアを特定できる。