Platform SDK: DirectX |
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::GetFlipStatus と IDirectDrawSurface7::GetBltStatus はすぐに返るため、アプリケーションで周期的に使用しても、ほとんど速度は低下しない。
DirectDrawSurface7.Flip メソッドが呼び出されると、プライマリ サーフェスとバック バッファが交換される。ただし、この交換は直ぐに行われない。たとえば、前回のフリップが終了していないか成功しなかった場合、このメソッドは DDERR_WASSTILLDRAWING エラーを返す。
DDERR_WASSTILLDRAWING が返されなくなるまで待つアプリケーションは効率が悪い。代わりに、フリッピングが終了したかどうかを決定するバック バッファで DirectDrawSurface7.GetFlipStatus メソッドを呼び出すアプリケーションの関数を作成するべきである。
前回のフリッピングが終了せずに、呼び出しで DDERR_WASSTILLDRAWING が返る場合、アプリケーションではステータスを再び調べる前に、他のタスクを実行できる。もしくは、次のフリッピングを実行できる。次の例でこの概念を説明する。
while(DDSBack.GetFlipStatus(DDGFS_ISFLIPDONE) = DDERR_WASSTILLDRAWING) ' 前回のフリッピングが終了するまで待つ。アプリケーションは、 ' ここで別のタスクを実行することができる。 DDSPrimary->Flip(NOTHING, 0)
ブリットが終了したかどうかを判断するために、同じような方法で DirectDrawSurface7.GetBltStatus メソッドを使うことができる。DirectDrawSurface7.GetFlipStatus と DirectDrawSurface7.GetBltStatus はすぐに返るため、アプリケーションで周期的に使用しても、ほとんど速度は低下しない。