Platform SDK: DirectX

ステップ 2 : 深度バッファを作成する

[C++]

ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「Direct3D 直接モードの C/C++ チュートリアル」を参照すること。

[Visual Basic]

ここで、深度バッファ フォーマットの選択を終了したので、深度バッファとなる DirectDrawSurface オブジェクトを作成することができる。サーフェスのピクセル フォーマットは、列挙によって決定されたものであるが、サーフェスの寸法は、アタッチされるレンダリング ターゲット サーフェスと同一にしなければならない。サンプル ZBuffer では、このタスクに対して次のコードを使用する。

g_ddsd.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT Or DDSD_PIXELFORMAT
    g_ddsd.ddsCaps.lCaps = DDSCAPS_ZBUFFER
g_ddsd.lWidth = g_rcDest.Right - g_rcDest.Left
g_ddsd.lHeight = g_rcDest.Bottom - g_rcDest.Top
g_ddsd.ddpfPixelFormat = ddpfZBuffer

上記のコードは、設定済みのグローバル変数から計算されたレンダリング ターゲット サーフェスの寸法を使用して、深度バッファ用の DDSURFACEDESC2 型を準備しているだけである。最終的には、前のステップのステップ 1 : 深度バッファ フォーマットを列挙する」で取得したピクセル フォーマット情報が、サーフェス記述にコピーされる。

g_ddsd.ddpfPixelFormat = ddpfZBuffer

注 :  ハードウェア デバイスは、深度バッファを、メモリ中の位置に関係なく使用することができる。ハードウェア デバイスの使用時には、サーフェス能力フラグ DDSCAPS_VIDEOMEMORY および DDSCAPS_SYSTEMMEMORY を省略して、バッファの最適位置をデバイスに決定させるのが最善である。しかし、ソフトウェア デバイスは、深度バッファがシステム メモリに存在しないと、作成することができない。サンプル ZBuffer の次のコードでは、DDSCAPS_SYSTEMMEMORY フラグをセットしているが、実際のアプリケーションでは、サーフェス メモリがシステム メモリとディスプレイ メモリのどちらに存在するかを確認する、簡単な検索メカニズムを実装する必要がある。

' サーフェスがディスプレイ メモリに存在する場合、DDSCAPS_VIDEOMEMORY と指定する。
' 詳細については、SDK のドキュメントを参照すること。
g_ddsd.ddsCaps.lCaps = g_ddsd.ddsCaps.lCaps Or DDSCAPS_SYSTEMMEMORY

サーフェス記述の準備ができたら、コードは DirectDraw7.CreateSurface メソッドを呼び出して、新しい深度バッファ サーフェスを作成する。

Set g_ddsZBuffer = g_dd.CreateSurface(g_ddsd)

作成された深度バッファは、「ステップ 3 : 深度バッファをアタッチする」で説明するように、レンダリング ターゲットとして使用されるサーフェスにアタッチすることができる。