Platform SDK: DirectX

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 を返す。

失敗すれば、以下のエラー値のいずれかを返す。

DDERR_GENERIC
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NOFLIPHW
DDERR_NOTFLIPPABLE
DDERR_SURFACEBUSY
DDERR_SURFACELOST
DDERR_UNSUPPORTED
DDERR_WASSTILLDRAWING

注意

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