IDXGISwapChain::ResizeBuffers メソッド (dxgi.h)
スワップ チェーンのバック バッファー サイズ、形式、バッファー数を変更します。 これは、アプリケーション ウィンドウのサイズを変更するときに呼び出す必要があります。
構文
HRESULT ResizeBuffers(
UINT BufferCount,
UINT Width,
UINT Height,
DXGI_FORMAT NewFormat,
UINT SwapChainFlags
);
パラメーター
BufferCount
型: UINT
スワップ チェーン内のバッファーの数 (すべてのバック バッファーとフロント バッファーを含む)。 この数は、スワップ チェーンを作成したバッファーの数とは異なる場合があります。 この数値を DXGI_MAX_SWAP_CHAIN_BUFFERSより大きくすることはできません。 スワップ チェーン内のバッファーの既存の数を保持するには、この数を 0 に設定します。 フリップ プレゼンテーション モデルには、2 つ未満のバッファーを指定することはできません。
Width
型: UINT
バック バッファーの新しい幅。 ゼロを指定した場合、DXGI はターゲット ウィンドウのクライアント領域の幅を使用します。 IDXGIFactory2::CreateSwapChainForComposition メソッドを呼び出してコンポジション サーフェスのスワップ チェーンを作成した場合、幅をゼロとして指定することはできません。
Height
型: UINT
バック バッファーの新しい高さ。 ゼロを指定した場合、DXGI はターゲット ウィンドウのクライアント領域の高さを使用します。 IDXGIFactory2::CreateSwapChainForComposition メソッドを呼び出してコンポジション サーフェスのスワップ チェーンを作成した場合、高さをゼロとして指定することはできません。
NewFormat
種類: DXGI_FORMAT
バック バッファーの新しい形式の DXGI_FORMAT型指定された値。 バック バッファーの既存 の 形式を保持するには、この値を DXGI_FORMAT_UNKNOWN に設定します。 フリップ プレゼンテーション モデルでは、ビット ブロック転送 (bitblt) モデルよりも制限された形式のセットがサポートされています。
SwapChainFlags
型: UINT
ビットごとの OR 演算を使用して結合される DXGI_SWAP_CHAIN_FLAG型指定された値の組み合わせ。 結果の値は、スワップ チェーン動作のオプションを指定します。
戻り値
型: HRESULT
成功した場合はS_OKを返します。それ以外の場合はエラー コード。 エラー コードの一覧については、「 DXGI_ERROR」を参照してください。
解説
バック バッファーへの未処理の参照をすべて解放しない限り、スワップ チェーンのサイズを変更することはできません。 ResizeBuffers を成功させるには、バック バッファー上のすべての直接参照と間接参照を解放する必要があります。
直接参照は、リソースで AddRef を呼び出した後、アプリケーションによって保持されます。
間接参照は、リソースへのビュー、リソースのビューをデバイス コンテキストにバインドする、リソースを使用したコマンド リスト、そのリソースへのビューを使用したコマンド リスト、リソースを使用した別のコマンド リストを実行したコマンド リストなどによって保持されます。
ResizeBuffers を呼び出す前に、リソース、リソースへのビュー、およびリソースまたはビューを使用するコマンド リストに対するすべての参照 (適切な数のリリース呼び出しを呼び出すことによって) をアプリケーションが解放し、リソースとビューの両方がデバイス コンテキストにバインドされていないことを確認します。 ID3D11DeviceContext::ClearState を使用して、すべての参照が確実に解放されるようにすることができます。 ビューが遅延コンテキストにバインドされている場合は、部分的にビルドされたコマンド リストも破棄する必要があります (コマンド リストで ID3D11DeviceContext::ClearState、ID3D11DeviceContext::FinishCommandList、Release を呼び出します)。 ResizeBuffers を呼び出した後は、IDXGISwapChain::GetBuffer を使用してインターフェイスのクエリを再実行できます。
DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLEで作成したスワップ チェーンの場合、ResizeBuffers を呼び出す前に、スワップ チェーンのバックバッファー サーフェイスで IDXGISurface1::ReleaseDC を呼び出して、未処理の GDI デバイス コンテキスト (DC) が開かないようにします。
クライアント ウィンドウのサイズが変更されたとき (つまり、アプリケーションがWM_SIZE メッセージを受信する場合) には、 ResizeBuffers を呼び出することをお勧めします。
Windows 8 と Windows 7 の IDXGISwapChain::ResizeBuffers の唯一の違いは、 DXGI_SWAP_EFFECT_FLIP_SEQUENTIALまたはDXGI_SWAP_EFFECT_FLIP_DISCARD 値セットを使用して作成したフリップ プレゼンテーション モデルスワップ チェーンです。 Windows 8 では、全画面表示モードとウィンドウ モードの切り替えを実現するには、 ResizeBuffers を呼び出す必要があります。それ以外の場合、 IDXGISwapChain::P resent メソッドの次の呼び出しは失敗します。
要件
対象プラットフォーム | Windows |
ヘッダー | dxgi.h |
Library | DXGI.lib |