次の方法で共有


IDXGIOutputDuplication::ReleaseFrame メソッド (dxgi1_2.h)

アプリケーションがフレームの処理を完了したことを示します。

構文

HRESULT ReleaseFrame();

戻り値

ReleaseFrame は 次を返します。

  • 正常に完了した場合は、S_OKします。
  • アプリケーションでフレームが既に解放されている場合は、DXGI_ERROR_INVALID_CALLします。
  • デスクトップ重複インターフェイスが無効な場合にDXGI_ERROR_ACCESS_LOSTします。 デスクトップの複製インターフェイスは、通常、別の種類のイメージがデスクトップに表示されると無効になります。 この状況の例を次に示します。
    • デスクトップ スイッチ
    • モードの変更
    • DWM オン、DWM オフ、またはその他の全画面表示アプリケーションから切り替える
    このような場合、アプリケーションは IDXGIOutputDuplication インターフェイスを解放し、新しいコンテンツの新しい IDXGIOutputDuplication を作成する必要があります。
  • 場合によっては、 DXGI_ERROR トピックで説明されているその他のエラー コード。

解説

アプリケーションは、次のフレームを取得する前にフレームを解放する必要があります。 フレームが解放されると、デスクトップ ビットマップを含むサーフェスが無効になります。DirectX グラフィックス操作でサーフェスを使用することはできません。

パフォーマンス上の理由から、 IDXGIOutputDuplication::AcquireNextFrame メソッドを呼び出して次のフレームを取得する直前に、フレームを解放することをお勧めします。 クライアントがフレームを所有していない場合、オペレーティング システムはすべてのデスクトップ更新プログラムをサーフェスにコピーします。 これにより、オペレーティング システムが発生するフレームごとに同じリージョンを更新すると、GPU サイクルが無駄になることがあります。 クライアントがフレームを取得すると、クライアントはこのリージョンの最終更新のみを認識します。したがって、前のフレームの間に重複する更新が無駄になります。 クライアントがフレームを取得すると、クライアントはサーフェスを所有します。そのため、オペレーティング システムは更新されたリージョンのみを追跡でき、デスクトップの更新プログラムをサーフェスにコピーすることはできません。 この動作のため、現在のフレームを解放する呼び出しから次のフレームを取得する呼び出しまでの時間を最小限に抑えることをおすすめします。

要件

   
サポートされている最小のクライアント Windows 8 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー dxgi1_2.h
Library Dxgi.lib

関連項目

IDXGIOutputDuplication