Platform SDK: DirectX

ステップ 4.1 : サーフェス要件の定義

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectDraw Visual Basic チュートリアル」を参照すること。

[C++]

フリッピング サーフェスを作成する最初のステップは、DDSURFACEDESC2 構造体でサーフェス要件を定義することである。次の例では、フリッピング サーフェスを作成するのに必要となる、構造体定義とフラグを示している。

// 1 つのバック バッファのあるプライマリ サーフェスを作成する。
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP |
                      DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;

この例では、dwSize メンバが DDSURFACEDESC2 構造体のサイズに設定される。これは、DirectDraw メソッドの呼び出しで無効なメンバ エラーが返らないようにするためである (dwSize メンバは、DDSURFACEDESC2 構造体の将来の拡張機能に対して用意されたものである)。

dwFlags メンバは、DDSURFACEDESC2 構造体のどのメンバに有効な情報を埋め込むのかを決定する。DDEx1 の例では、dwFlags を設定することで、DDSCAPS 構造体 (DDSD_CAPS) を使ってバック バッファ (DDSD_BACKBUFFERCOUNT) を作成することを指定する。

この例の dwCaps メンバは、DDSCAPS 構造体で使われるフラグを示している。この場合、プライマリ サーフェス (DDSCAPS_PRIMARYSURFACE)、フリッピング サーフェス (DDSCAPS_FLIP)、および複合サーフェス (DDSCAPS_COMPLEX) を指定する。

最後に、この例ではバック バッファを 1 つ指定する。バック バッファは、背景とスプライトが実際に書き込まれる場所である。そして、バック バッファはプライマリ サーフェスにフリップされる。DDEx1 の例では、バック バッファの数は 1 に設定されている。ただし、ディスプレイ メモリの許容範囲内であれば、いくつでもバック バッファを作成できる。1 つ以上のバック バッファの作成に関する詳細情報は、「トリプル バッファリング」を参照すること。

サーフェス メモリは、ディスプレイ メモリまたはシステム メモリのどちらかである。アプリケーションがディスプレイ メモリを使い切る場合 (たとえば、1 MB の RAM しかないディスプレイ アダプタ上で複数のバック バッファを指定した場合)、DirectDraw はシステム メモリを使用する。また、DDSCAPS 構造体の dwCaps メンバを DDSCAPS_SYSTEMMEMORY または DDSCAPS_VIDEOMEMORY に設定することにより、システム メモリだけ、またはディスプレイ メモリだけを使用するように指定できる。(DDSCAPS_VIDEOMEMORY を指定したが、サーフェスを作成するための十分なメモリが得られない場合、IDirectDraw7::CreateSurface DDERR_OUTOFVIDEOMEMORY エラーを返す)。

次項 :ステップ 4.2 : サーフェスの作成