IDXGIFactory::CreateSwapChain メソッド (dxgi.h)

[Direct3D 11.1 以降では、 CreateSwapChain を 使用してスワップ チェーンを作成しないことをお勧めします。 代わりに、スワップ チェーンの作成方法に応じて、 CreateSwapChainForHwndCreateSwapChainForCoreWindow、または 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 または ppSwapChainNULL の場合はDXGI_ERROR_INVALID_CALL、全画面表示モードを要求して使用できない場合はDXGI_STATUS_OCCLUDEDするか、E_OUTOFMEMORY。 渡されたデバイスの種類によって定義されたその他のエラー コードも返される場合があります。

注釈

メモ セッション 0 プロセスでこの API を呼び出すと、 DXGI_ERROR_NOT_CURRENTLY_AVAILABLEが返されます。
 
全画面表示モードでスワップ チェーンを作成しようとして、全画面表示モードが使用できない場合、スワップ チェーンはウィンドウ モードで作成され、DXGI_STATUS_OCCLUDEDが返されます。

バッファーの幅またはバッファーの高さが 0 の場合、サイズはスワップ チェーンの説明の出力ウィンドウ サイズから推論されます。

スワップ チェーンの作成時にターゲット出力を明示的に選択できないため、全画面表示のスワップ チェーンを作成しないことをお勧めします。 これにより、スワップ チェーン サイズと出力ウィンドウ サイズが一致しない場合に、プレゼンテーションのパフォーマンスが低下する可能性があります。 サイズが一致するようにするには、次の 2 つの方法があります。

  • ウィンドウ化されたスワップ チェーンを作成し、 IDXGISwapChain::SetFullscreenState を使用して全画面表示に設定します。
  • 作成直後にスワップ チェーンへのポインターを保存し、それを使用して、WM_SIZE イベント中に出力ウィンドウ のサイズを取得します。 次に、ウィンドウから全画面表示への切り替え中に、スワップ チェーン バッファーのサイズを変更します ( IDXGISwapChain::ResizeBuffers を使用)。
スワップ チェーンが全画面表示モードの場合は、解放する前に SetFullscreenState を使用してウィンドウ モードに切り替える必要があります。 スワップ チェーンのリリースの詳細については、「 DXGI の概要」の「スワップ チェーンの破棄」セクションを参照してください。

ランタイムが初期フレームを全画面表示でレンダリングした後、 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_EFFECTDXGI_SWAP_CHAIN_FLAGの値は、pDesc が指すスワップ チェーンの説明で指定できます。 これらの値を使用すると、プリWindows 8 API を使用して、フリップモデルプレゼンテーションやコンテンツ保護などの機能を使用できます。

ただし、ステレオ プレゼンテーションを使用し、フリップ モデルのサイズ変更動作を変更するには、アプリケーションで IDXGIFactory2::CreateSwapChainForHwnd メソッドを使用する必要があります。 それ以外の場合、バックバッファーの内容は、プレゼンテーションのターゲット サイズに合わせて暗黙的にスケーリングされます。つまり、スケーリングをオフにすることはできません。

Windows ストア アプリに関する注意事項

Windows ストア アプリが全画面表示を指定して CreateSwapChain を 呼び出すと、 CreateSwapChain は 失敗します。

Windows ストア アプリは 、IDXGIFactory2::CreateSwapChainForCoreWindow メソッドを呼び出してスワップ チェーンを作成します。

スワップ チェーンのバック バッファーの形式を選択する方法については、「 色空間のデータの変換」を参照してください。

要件

要件
対象プラットフォーム Windows
ヘッダー dxgi.h
Library DXGI.lib

こちらもご覧ください

DXGI インターフェイス

最適なパフォーマンスを得るための DXGI フリップ モデルを使用する

IDXGIFactory