次の方法で共有


IDirect3DSwapChain9::Present メソッド

IDirect3DSwapChain9::Present メソッド

スワップ チェーンが所有するバック バッファのシーケンスの中で次のコンテンツを提示する。

構文

HRESULT Present(      
    const RECT *pSourceRect,
    CONST RECT *pDestRect,
    HWND hDestWindowOverride,
    CONST RGNDATA *pDirtyRegion,
    DWORD dwFlags
);

パラメータ

  • pSourceRect
    [in] 転送元矩形を含む RECT 構造体へのポインタ。この値は、スワップ チェーンが D3DSWAPEFFECT_COPY で作成されていない限り、NULL でなければならない。NULL の場合は、転送元サーフェイス全体が表示される。矩形が転送元サーフェイスを超えた場合、矩形は転送元サーフェイスにクリッピングされる。

  • pDestRect
    [in] ウィンドウのクライアント座標で転送先矩形を含む RECT 構造体へのポインタ。この値は、スワップ チェーンが D3DSWAPEFFECT_COPY で作成されていない限り、NULL でなければならない。NULL の場合は、クライアント領域全体が転送先矩形で満たされる。矩形が転送先のクライアント領域を越えた場合、矩形は転送先のクライアント領域にクリッピングされる。

  • hDestWindowOverride
    [in] クライアント領域がこのプレゼンテーションの対象として扱われる転送先ウィンドウ。このパラメータが NULL の場合は、D3DPRESENT_PARAMETERShWndDeviceWindow メンバが使用される。

  • pDirtyRegion
    [in] この値は、スワップ チェーンが D3DSWAPEFFECT_COPY で作成されていない限り、NULL でなければならない。スワップ チェーンの詳細については、「サーフェイスのフリップ」および「D3DSWAPEFFECT」を参照すること。

    この値が NULL でない場合、格納される範囲は、バック バッファ座標で表現される。範囲内の矩形は、更新の必要があるピクセルの最小セットである。範囲内のピクセルのみ、または適切に拡張された矩形セットのみをコピーしてプレゼンテーションを最適化する際、このメソッドはこれらの矩形を考慮する。これは、最適化の支援のみに使われるものであり、アプリケーションは、コピーされる範囲の正確さに依存すべきではない。実装時に、転送元矩形全体をコピーするよう選択することもできる。

  • dwFlags
    [in] ドライバがプレゼンテーションをスケジュールできないとレポートした際に、アプリケーションがメソッドをすぐに戻すよう要求できるようにする。有効な値は 0、または D3DPRESENT_DONOTWAIT と D3DPRESENT_LINEAR_CONTENT の任意の組み合わせ。

    dwFlags = 0 の場合、このメソッドは、Microsoft® DirectX® 9.0 以前と同じように動作する。ハードウェアが解放されるまで、Present はエラーを返さずに単純に戻る。

    dwFlags = D3DPRESENT_DONOTWAIT で、ハードウェアが vsync 間隔の処理または待機でビジー状態の場合、メソッドは D3DERR_WASSTILLDRAWING を返す。

    dwFlags = D3DPRESENT_LINEAR_CONTENT の場合、ウィンドウ スワップ チェーンのガンマ補正が線形空間から sRGB へ実行される。このフラグは、ドライバが D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION を解放する場合のみ有効となる。ガンマ補正の詳細については、「ガンマ」を参照すること。

戻り値

成功した場合は、D3D_OK を返す。

失敗した場合は、次のいずれかの値を返す。

D3DERR_DEVICELOST デバイスは、消失しているが、現在リセットできない。したがって、レンダリングは不可能である。
D3DERR_DRIVERINTERNALERROR

内部ドライバ エラー。通常、このエラーを受け取ったら、アプリケーションはシャットダウンしなければならない。詳細については、「ドライバの内部エラー」を参照すること。

D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドのパラメータに無効な値が設定されている場合などである。
D3DERR_OUTOFVIDEOMEMORY Microsoft® Direct3D® が処理を行うのに十分なディスプレイ メモリがない。
E_OUTOFMEMORY Direct3D が呼び出しを完了するための十分なメモリを割り当てることができなかった。

注意

IDirect3DDevice9::Present メソッドは、IDirect3DSwapChain9::Present へのショートカットである。スワップ チェーン メソッドは更新され、ドライバがプレゼンテーションをスケジュールできないとレポートした際に、アプリケーションがメソッドをすぐに戻すように要求できるフラグをとる。

必要に応じて、転送元矩形内のピクセルをターゲット ウィンドウのクライアント領域の転送先矩形に転送するために拡大処理が適用される。

レンダリング ターゲットが現在のレンダリング ターゲットではない場合 (追加のスワップ チェーンを作成する際に取得したバック バッファなど) を除き、IDirect3DDevice9::PresentIDirect3DDevice9::BeginSceneIDirect3DDevice9::EndScene のペアの間に呼び出すと、このメソッドは失敗する。これは、DirectX 9.0 の新しい動作である。

参照

IDirect3DDevice9::Reset