IDXGIFactory::CreateSwapChain メソッド (dxgi.h)
[Direct3D 11.1 以降では、 CreateSwapChain を 使用してスワップ チェーンを作成しないことをお勧めします。 代わりに、スワップ チェーンの作成方法に応じて、 CreateSwapChainForHwnd、 CreateSwapChainForCoreWindow、または CreateSwapChainForComposition を使用します。
スワップ チェーンを作成します。
構文
HRESULT CreateSwapChain(
[in] IUnknown *pDevice,
[in] DXGI_SWAP_CHAIN_DESC *pDesc,
[out] IDXGISwapChain **ppSwapChain
);
パラメーター
[in] pDevice
種類: IUnknown*
Direct3D 11 以前のバージョンの Direct3D の場合、これはスワップ チェーンの Direct3D デバイスへのポインターです。 Direct3D 12は、直接コマンド キューへのポインターです (ID3D12CommandQueue を参照)。 このパラメーターを NULL にすることはできません。
[in] pDesc
種類: DXGI_SWAP_CHAIN_DESC*
スワップ チェーン記述の DXGI_SWAP_CHAIN_DESC 構造体へのポインター。 このパラメーターを NULL にすることはできません。
[out] ppSwapChain
種類: IDXGISwapChain**
CreateSwapChain によって作成されるスワップ チェーンの IDXGISwapChain インターフェイスへのポインターを受け取る変数へのポインター。
戻り値
種類: HRESULT
pDesc または ppSwapChain が NULL の場合はDXGI_ERROR_INVALID_CALL、全画面表示モードを要求して使用できない場合はDXGI_STATUS_OCCLUDEDするか、E_OUTOFMEMORY。 渡されたデバイスの種類によって定義されたその他のエラー コードも返される場合があります。
注釈
バッファーの幅またはバッファーの高さが 0 の場合、サイズはスワップ チェーンの説明の出力ウィンドウ サイズから推論されます。
スワップ チェーンの作成時にターゲット出力を明示的に選択できないため、全画面表示のスワップ チェーンを作成しないことをお勧めします。 これにより、スワップ チェーン サイズと出力ウィンドウ サイズが一致しない場合に、プレゼンテーションのパフォーマンスが低下する可能性があります。 サイズが一致するようにするには、次の 2 つの方法があります。
- ウィンドウ化されたスワップ チェーンを作成し、 IDXGISwapChain::SetFullscreenState を使用して全画面表示に設定します。
- 作成直後にスワップ チェーンへのポインターを保存し、それを使用して、WM_SIZE イベント中に出力ウィンドウ のサイズを取得します。 次に、ウィンドウから全画面表示への切り替え中に、スワップ チェーン バッファーのサイズを変更します ( IDXGISwapChain::ResizeBuffers を使用)。
ランタイムが初期フレームを全画面表示でレンダリングした後、 IDXGISwapChain::P resent の呼び出し中に、ランタイムが予期せず全画面表示を終了する可能性があります。 この問題を回避するには、 CreateSwapChain を呼び出して全画面表示スワップ チェーンを作成した直後に次のコードを実行することをお勧めします (DXGI_SWAP_CHAIN_DESCの Windowed メンバー はFALSE に設定されます)。
// Detect if newly created full-screen swap chain isn't actually full screen.
IDXGIOutput* pTarget; BOOL bFullscreen;
if (SUCCEEDED(pSwapChain->GetFullscreenState(&bFullscreen, &pTarget)))
{
pTarget->Release();
}
else
bFullscreen = FALSE;
// If not full screen, enable full screen again.
if (!bFullscreen)
{
ShowWindow(hWnd, SW_MINIMIZE);
ShowWindow(hWnd, SW_RESTORE);
pSwapChain->SetFullscreenState(TRUE, NULL);
}
DXGI_SWAP_EFFECTとDXGI_SWAP_CHAIN_FLAGの値は、pDesc が指すスワップ チェーンの説明で指定できます。 これらの値を使用すると、プリWindows 8 API を使用して、フリップモデルプレゼンテーションやコンテンツ保護などの機能を使用できます。
ただし、ステレオ プレゼンテーションを使用し、フリップ モデルのサイズ変更動作を変更するには、アプリケーションで IDXGIFactory2::CreateSwapChainForHwnd メソッドを使用する必要があります。 それ以外の場合、バックバッファーの内容は、プレゼンテーションのターゲット サイズに合わせて暗黙的にスケーリングされます。つまり、スケーリングをオフにすることはできません。
Windows ストア アプリに関する注意事項
Windows ストア アプリが全画面表示を指定して CreateSwapChain を 呼び出すと、 CreateSwapChain は 失敗します。Windows ストア アプリは 、IDXGIFactory2::CreateSwapChainForCoreWindow メソッドを呼び出してスワップ チェーンを作成します。
スワップ チェーンのバック バッファーの形式を選択する方法については、「 色空間のデータの変換」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | dxgi.h |
Library | DXGI.lib |