IDirectDrawSurface7::Flip
IDirectDrawSurface7::Flip メソッドは、DDSCAPS_BACKBUFFER サーフェスと関連付けられたサーフェス メモリを、フロントバッファ サーフェスと関連付ける。
HRESULT Flip(
LPDIRECTDRAWSURFACE7 lpDDSurfaceTargetOverride,
DWORD dwFlags
);
パラメータ
- lpDDSurfaceTargetOverride
- フリッピング チェーンの任意のサーフェスにおける IDirectDrawSurface7 インターフェイスのアドレス。このパラメータのデフォルトは NULL であり、DirectDraw は互いにアタッチされている順にバッファから循環する。このパラメータが NULL でない場合、DirectDraw はフリッピング チェーンの次のサーフェスの代わりに指定したサーフェスへフリップする。指定したサーフェスがフリッピング チェーンのメンバではない場合、メソッドは失敗する。
- dwFlags
- 指定するフリップ オプションのフラグ
- DDFLIP_DONOTWAIT
- IDirectDrawSurface7 インターフェイスでは、デフォルトは DDFLIP_WAIT である。デフォルトを無効にする場合、およびアクセラレータがビジーの場合 (DDERR_WASSTILLDRAWING 戻り値で示される) は、DDFLIP_DONOTWAIT を使用する。
- DDFLIP_EVEN
- オーバーレイ サーフェスでビデオを表示する場合に使用。新しいサーフェスには、ビデオ信号の偶数フィールドからのデータが含まれる。このフラグは、DDFLIP_ODD フラグと共に使用することはできない。
- DDFLIP_STEREO
- DirectDraw は、メイン ステレオ サーフェスをフリップして表示する。このフラグを設定すると、ステレオ自動フリッピングが有効になる。個々のスクリーンをリフレッシュする間、ハードウェアは自動的に左右のバッファ間をフリップする。
- DDFLIP_INTERVAL2
- DDFLIP_INTERVAL3
- DDFLIP_INTERVAL4
- これらのフラグは、各フリップ間を待機する垂直リトレイス数を示す。デフォルト値は 1。DirectDraw では、指定した垂直リトレイス数になるまで、フリップ内の各サーフェスに対する DERR_WASSTILLDRAWING を返す。DDFLIP_INTERVAL2 を設定すると、DirectDraw は 2 番目の垂直同期ごとにフリップする。DDFLIP_INTERVAL3 では 3 番目の同期ごと、DDFLIP_INTERVAL4 では 4 番目の同期ごとにフリップする。
これらのフラグは効率的であるのは、DDCAPS2_FLIPINTERVAL がデバイスに返される DDCAPS 構造体に設定される場合だけである。
- DDFLIP_NOVSYNC
- 次の走査線にできる限り近い物理的なフリップを実行する DirectDraw を引き起こす。2 つのフリップされたサーフェスを含む次の処理では、物理的なフリップが終了したかどうかのチェックは行われない。つまり、この理由から DDERR_WASSTILLDRAWING が返されることはない (その他の理由によって返される場合はある)。このため、アプリケーションではモニタ リフレッシュ レート以上の高周波数でフリップを実行することが可能であるが、目に見える異常が発生する場合がある。
DDCAPS2_FLIPNOVSYNC がデバイスに返される DDCAPS 構造体に設定されない場合、DDFLIP_NOVSYNC はエフェクトがない。
- DDFLIP_ODD
- オーバーレイ サーフェスでビデオを表示する場合に使用。新しいサーフェスには、ビデオ信号の奇数フィールドからのデータが含まれる。このフラグは、DDFLIP_EVEN フラグと共に使用することはできない。
- DDFLIP_WAIT
- 通常、ディスプレイ ハードウェアの状態が不適切なためにフリップをセット アップできない場合、DDERR_WASSTILLDRAWING エラーが即座に返り、フリップは起こらない。このフラグを設定すると、メソッドはハードウェア アブストラクション レイヤ (HAL) から DDERR_WASSTILLDRAWING エラーを受け取った場合でもフリップを続行しようとする。この場合、メソッドはフリッピング処理が成功するか、DDERR_SURFACEBUSY のような別のエラーが返されるまで返さない。
戻り値
成功すれば、DD_OK を返す。
失敗すれば、以下のエラー値のいずれかを返す。
注意
IDirectDrawSurface7 の場合、デフォルトでは、このメソッドはアクセラレータが終了するまで待機する。つまり、デフォルト状態では、このメソッドは DDERR_WASSTILLDRAWING を返さない。エラー コードを受け取り、フリップ処理が成功するまで待機しない場合は、DDFLIP_DONOTWAIT フラグを使用する。
このメソッドを呼び出すことができるのは、DDSCAPS_FLIP および DDSCAPS_FRONTBUFFER 能力のあるサーフェスだけである。以前にフロント バッファに関連付けられたディスプレイ メモリは、バック バッファと関連付けられる。
lpDDSurfaceTargetOverride パラメータは、バック バッファがフロント バッファになるべきバッファではないという場合に使用されるが、このような場合はまれである。通常、このパラメータは NULL である。
IDirectDrawSurface7::Flip メソッドは、常に垂直帰線消去と同期する。サーフェスがビデオ ポートに割り当てられていると、このメソッドは表示状態のオーバーレイ サーフェスおよびビデオ ポートのターゲット サーフェスを更新する。
詳細については、「フリッピング サーフェス」を参照すること。
Windows NT/2000 :Windows 2000 が必要。
Windows 95/98 : Windows 98 が必要。
ヘッダー : ddraw.h で宣言。
参照
IDirectDrawSurface7::GetFlipStatus