Platform SDK: DirectX

ステップ 3 : バック バッファへのオフスクリーン サーフェスのブリット

[Visual Basic]

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

[C++]

WM_TIMER メッセージには、サーフェスとフリッピング サーフェスへの書き込みに対するコードがある。DDEx3 の場合、次のようなコードがあり、適当なオフスクリーン サーフェスを選択してバック バッファに転送する。

rcRect.left = 0; 
rcRect.top = 0; 
rcRect.right = 640; 
rcRect.bottom = 480; 
if(phase) 
{ 
    pdds = lpDDSTwo; 
    phase = 0; 
} 
else 
{ 
    pdds = lpDDSOne; 
    phase = 1; 
} 
while(1) 
{ 
    ddrval = lpDDSBack->BltFast(0, 0, pdds, &rcRect, FALSE); 
    if(ddrval == DD_OK) 
    { 
        break; 
    } 
} 

phase 変数では、バック バッファにブリットされるオフスクリーン サーフェスを決定する。そして、IDirectDrawSurface7::BltFast メソッドを呼び出して、選択されたオフスクリーン サーフェスは左上角の始点 (0,0) からバック バッファにブリットする。rcRect パラメータは RECT 構造体のポインタであり、ブリットされるオフスクリーン サーフェスの左上角と右下角を定義する。最後のパラメータは FALSE (または 0) に設定し、特別な転送フラグを使わないことを示す。

アプリケーションの要求により、IDirectDrawSurface7::Blt メソッドまたは IDirectDrawSurface7::BltFast メソッドのどちらかを使い、オフスクリーン バッファからブリットする。ディスプレイ メモリにあるオフスクリーン プレーン バッファからブリットを実行する場合は、IDirectDrawSurface7::BltFast を使うようにする。ディスプレイ アダプタ上のハードウェア ブリットを使うシステムでは速度を早くできない。しかし、ブリットの実行にハードウェア エミュレーションを使うシステムでは、10 パーセント程度早くなる。このため、ディスプレイ メモリからディスプレイ メモリへのブリットするすべてのディスプレイ処理において、IDirectDrawSurface7::BltFast を使うべきである。ただし、システム メモリからブリットしたり、特別なハードウェア フラグを必要とする場合は、IDirectDrawSurface7::Blt を使用しなくてはならない。

オフスクリーン サーフェスをバック バッファにロードした後、バック バッファプライマリ サーフェスは、上述のチュートリアルで示した方法とほぼ同様にフリップされる。