Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectDraw Visual Basic チュートリアル」を参照すること。
次のコードでは、DDEx3 の doInit サンプル関数を追加して、2 つのオフスクリーン バッファを作成する。
// オフスクリーン ビットマップを作成する。 ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; ddsd.dwHeight = 480; ddsd.dwWidth = 640; ddrval = lpDD->CreateSurface(&ddsd, &lpDDSOne, NULL); if(ddrval != DD_OK) { return initFail(hwnd); } // 別のオフスクリーン ビットマップを作成する。 ddrval = lpDD->CreateSurface(&ddsd, &lpDDSTwo, NULL); if(ddrval != DD_OK) { return initFail(hwnd); }
dwFlags メンバは、アプリケーションが DDSCAPS 構造体を使うことを指定して、バッファの高さと幅 を設定する。サーフェスは、DDSCAPS_OFFSCREEN フラグが DDSCAPS 構造体に設定されることにより示されるように、オフスクリーン プレーン バッファとなる。高さと幅は、それぞれ 480 と 640 で DDSURFACEDESC2 構造体に設定される。サーフェスは、IDirectDraw7::CreateSurface メソッドを使って作成する。
オフスクリーン プレーン バッファは両方とも同じサイズなので、セカンド バッファを作成するためには、異なるポインタ名で IDirectDraw7::CreateSurface を再び呼び出せばよい。
また、DDSCAPS_SYSTEMMEMORY または DDSCAPS_VIDEOMEMORY のどちらかの能力を DDSCAPS 構造体に設定することにより、オフスクリーン バッファをシステム メモリまたはディスプレイ メモリに配置することを明示的に要求できる。ディスプレイ メモリにビットマップを保存することにより、オフスクリーン サーフェスとバック バッファ間の転送速度を速めることができる。ビットマップ アニメーションを使う場合に、このことがより重要となる。ただし、オフスクリーン バッファに DDSCAPS_VIDEOMEMORY を指定して、ビットマップ全体を保持するためのディスプレイ メモリが不十分な場合にサーフェスを作成しようとすると、DDERR_OUTOFVIDEOMEMORY エラー値が返される。