Direct3D のサーフェス (Direct3D 9)
サーフェスは、ディスプレイ メモリーの線形領域を表し、通常は表示カードのディスプレイ メモリーに常駐します。ただし、システム メモリーに保存することもできます。サーフェスは IDirect3DSurface9 インターフェイスによって管理されます。
- フロント バッファー。Graphics Adapter によって変換され、モニターに表示されるメモリーの矩形。Direct3D では、アプリメーションがフロント バッファーに直接書き込むことはありません。
- バック バッファー。アプリケーションが書き込むことができるメモリーの矩形。バック バッファーがモニターに直接表示されることはありません。
- サーフェスの反転。バック バッファーをフロント バッファーに移動する処理。
- スワップ チェーン。フロント バッファーにシリアルに表示できる 1 つまたは複数のバック バッファーのコレクション。
サーフェスを取得する
次のメソッドを呼び出すことでサーフェスを作成します。
- IDirect3DDevice9::CreateDepthStencilSurface
- IDirect3DDevice9::CreateOffscreenPlainSurface
- IDirect3DDevice9::CreateRenderTarget
サーフェス フォーマットによって、サーフェス メモリーの各ピクセルのデータが変換される方法が決まります。Direct3D では、D3DSURFACE_DESC 構造体の D3DFORMAT メンバーを使用してサーフェス フォーマットを記述します。IDirect3DSurface9::GetDesc メソッドを呼び出すことによって、既存のサーフェスのフォーマットを取得できます。
サーフェスが作成されると、次のいずれかのメソッドを呼び出すことでポインターを取得できます。
- IDirect3DCubeTexture9::GetCubeMapSurface
- IDirect3DDevice9::GetBackBuffer
- IDirect3DDevice9::GetDepthStencilSurface
- IDirect3DDevice9::GetFrontBufferData
- IDirect3DDevice9::GetRenderTarget
- IDirect3DSwapChain9::GetBackBuffer
- IDirect3DTexture9::GetSurfaceLevel
IDirect3DSurface9 インターフェイスでは、IDirect3DDevice9::UpdateSurface メソッドを介してメモリーに間接的にアクセスできます。このメソッドにより、1 つの IDirect3DSurface9 インターフェイスから別の IDirect3DSurface9 インターフェイスにピクセルの矩形領域をコピーすることができます。また、サーフェス インターフェイスには、ディスプレイ メモリーに直接アクセスするメソッドもあります。たとえば、IDirect3DSurface9::LockRect メソッドを使用すると、ディスプレイ メモリーの矩形領域をロックできます。サーフェス上の矩形領域をロックして作業を実行した後、IDirect3DSurface9::UnlockRect を呼び出すことが重要です。
その他のサーフェスに関するトピック
サーフェスの使用法の詳細は、次のいずれかのトピックで知ることができます。