Platform SDK: DirectX

フリッピングとブリットの状態取得

[C++]

IDirectDrawSurface7::Flip メソッドが呼び出されると、プライマリ サーフェスバック バッファが交換される。ただし、この交換は直ぐに行われない。たとえば、前回のフリップが終了していないか成功しなかった場合、このメソッドは DDERR_WASSTILLDRAWING を返す。この SDK に含まれるサンプルでは、IDirectDrawSurface7::Flip の呼び出しは、DD_OK が返されるまでループし続ける。また、IDirectDrawSurface7::Flip の呼び出しも直ぐには完了しない。システムで垂直帰線消去が生じた後に、フリッピングが実行される。

DDERR_WASSTILLDRAWING が返されなくなるまで待つアプリケーションは効率が悪い。代わりに、フリッピングが終了したかどうかを決定するバック バッファで IDirectDrawSurface7::GetFlipStatus メソッドを呼び出すアプリケーションの関数を作成するべきである。

前回のフリッピングが終了せずに、呼び出しで DDERR_WASSTILLDRAWING が返る場合、アプリケーションではステータスを再び調べる前に、他のタスクを実行できる。もしくは、次のフリッピングを実行できる。次の例でこの概念を説明する。

while(lpDDSBack->GetFlipStatus(DDGFS_ISFLIPDONE) == 
    DDERR_WASSTILLDRAWING); 
 
    // 前回のフリッピングが終了するまで待つ。アプリケーションは、
    // ここで別のタスクを実行することができる。
 
ddrval = lpDDSPrimary->Flip(NULL, 0); 

ブリットが終了したかどうかを判断するために、同じような方法で IDirectDrawSurface7::GetBltStatus メソッドを使うことができる。IDirectDrawSurface7::GetFlipStatusIDirectDrawSurface7::GetBltStatus はすぐに返るため、アプリケーションで周期的に使用しても、ほとんど速度は低下しない。

[Visual Basic]

DirectDrawSurface7.Flip メソッドが呼び出されると、プライマリ サーフェスバック バッファが交換される。ただし、この交換は直ぐに行われない。たとえば、前回のフリップが終了していないか成功しなかった場合、このメソッドは DDERR_WASSTILLDRAWING エラーを返す。

DDERR_WASSTILLDRAWING が返されなくなるまで待つアプリケーションは効率が悪い。代わりに、フリッピングが終了したかどうかを決定するバック バッファで DirectDrawSurface7.GetFlipStatus メソッドを呼び出すアプリケーションの関数を作成するべきである。

前回のフリッピングが終了せずに、呼び出しで DDERR_WASSTILLDRAWING が返る場合、アプリケーションではステータスを再び調べる前に、他のタスクを実行できる。もしくは、次のフリッピングを実行できる。次の例でこの概念を説明する。

while(DDSBack.GetFlipStatus(DDGFS_ISFLIPDONE) = 
    DDERR_WASSTILLDRAWING) 
 
' 前回のフリッピングが終了するまで待つ。アプリケーションは、
' ここで別のタスクを実行することができる。
 
DDSPrimary->Flip(NOTHING, 0) 

ブリットが終了したかどうかを判断するために、同じような方法で DirectDrawSurface7.GetBltStatus メソッドを使うことができる。DirectDrawSurface7.GetFlipStatusDirectDrawSurface7.GetBltStatus はすぐに返るため、アプリケーションで周期的に使用しても、ほとんど速度は低下しない。