Platform SDK: DirectX |
ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「Direct3D 直接モードの C/C++ チュートリアル」を参照すること。
ここで、深度バッファ フォーマットの選択を終了したので、深度バッファとなる 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 : 深度バッファをアタッチする」で説明するように、レンダリング ターゲットとして使用されるサーフェスにアタッチすることができる。