IDXGIFactory2::CreateSwapChainForCoreWindow メソッド (dxgi1_2.h)

スワップ チェーンの出力ウィンドウの CoreWindow オブジェクトに関連付けられているスワップ チェーンを作成します。

構文

HRESULT CreateSwapChainForCoreWindow(
  [in]           IUnknown                    *pDevice,
  [in]           IUnknown                    *pWindow,
  [in]           const DXGI_SWAP_CHAIN_DESC1 *pDesc,
  [in, optional] IDXGIOutput                 *pRestrictToOutput,
  [out]          IDXGISwapChain1             **ppSwapChain
);

パラメーター

[in] pDevice

Direct3D 11 以前のバージョンの Direct3D の場合、これはスワップ チェーンの Direct3D デバイスへのポインターです。 Direct3D 12は、直接コマンド キューへのポインターです (ID3D12CommandQueue を参照)。 このパラメーターを NULL にすることはできません。

[in] pWindow

CreateSwapChainForCoreWindow によって作成されるスワップ チェーンに関連付けられている CoreWindow オブジェクトへのポインター。

[in] pDesc

スワップ チェーン記述の DXGI_SWAP_CHAIN_DESC1 構造体へのポインター。 このパラメーターを NULL にすることはできません。

[in, optional] pRestrictToOutput

スワップ チェーンが制限されている IDXGIOutput インターフェイスへのポインター。 スワップ チェーンを別の出力に移動すると、コンテンツは黒になります。 必要に応じて、このパラメーターを、 DXGI_PRESENT_RESTRICT_TO_OUTPUT を使用してこの出力のコンテンツを制限する出力ターゲットに設定できます。 このパラメーターを設定して出力ターゲットのコンテンツを制限しない場合は、 NULL に設定できます。

[out] ppSwapChain

CreateSwapChainForCoreWindow によって作成されるスワップ チェーンの IDXGISwapChain1 インターフェイスへのポインターを受け取る変数へのポインター。

戻り値

CreateSwapChainForCoreWindow は次を返します。

  • スワップ チェーンが正常に作成された場合は、S_OKします。
  • 操作を完了するためにメモリが使用できない場合は、E_OUTOFMEMORYします。
  • び出し元のアプリケーションが無効なデータを提供した場合 ( pDesc または ppSwapChainNULL の場合など) にDXGI_ERROR_INVALID_CALLします。
  • pDevice に渡すデバイスの種類によって定義されている、DXGI_ERRORトピックで説明されているその他のエラー コードが考えられます。

Windows 7 のプラットフォーム更新プログラム: Windows 7 用プラットフォーム更新プログラム がインストールされている Windows 7 または Windows Server 2008 R2 では、 CreateSwapChainForCoreWindow がE_NOTIMPLで失敗します。 Windows 7 のプラットフォーム更新プログラムの詳細については、「Windows 7 用プラットフォーム更新プログラム」を参照してください。

注釈

メモIDXGIFactory2::CreateSwapChainForHwnd ではなく、Windows ストア アプリでこのメソッドを使用します。
 
スワップ チェーンの幅、高さ、または両方 (pDesc が指すDXGI_SWAP_CHAIN_DESC1Width メンバーと Height メンバー) をゼロとして指定すると、ランタイムは pWindow パラメーターが指定する出力ウィンドウからサイズを取得します。

その後、 IDXGISwapChain1::GetDesc1 メソッドを呼び出して、割り当てられた幅または高さの値を取得できます。

一度に 1 つのフリップ プレゼンテーション モデル スワップ チェーン (レイヤーごと) を CoreWindow に関連付けることができるため、オブジェクトの破棄を延期する Microsoft Direct3D 11 ポリシーでは、フリップ プレゼンテーション モデルスワップ チェーンを破棄して別のスワップ チェーンに置き換えようとすると、問題が発生する可能性があります。 この状況の詳細については、「 Flip Presentation Swap Chains での遅延破棄の問題」を参照してください。

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

スワップ チェーンの重複

Windows 8.1以降は、フォアグラウンド レイヤーに追加のスワップ チェーンを作成できます。 フォアグラウンド スワップ チェーンを使用すると、バックグラウンド スワップ チェーン (ゲームプレイなど) でリアルタイム レンダリングをスケールアップしながら、ネイティブ解像度で UI 要素をレンダリングできます。 これにより、UI の品質を犠牲にすることなく、より高速な塗りつぶし速度を実現するために低解像度のレンダリングが必要になるシナリオが可能になります。

フォアグラウンド スワップ チェーンは、pDesc が指すDXGI_SWAP_CHAIN_DESC1DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYERスワップ チェーン フラグを設定することによって作成されます。 フォアグラウンド スワップ チェーンでは 、DXGI_ALPHA_MODE_PREMULTIPLIED アルファ モードも使用し、 DXGI_SCALING_NONEを使用する必要があります。 事前乗算アルファとは、フレームが表示される前に、各ピクセルの色値にアルファ値が既に乗算されていることを意味します。 たとえば、アルファ値 50% の場合、100% 白の BGRA ピクセルは (0.5, 0.5, 0.5, 0.5) に設定されます。 アルファ値のプリマルチプライの手順は、アプリのブレンド状態を適用することにより、出力マージャー ステージで実行できます (ID3D11BlendState を参照してください)。それには、D3D11_RENDER_TARGET_BLEND_DESC 構造の SrcBlend フィールドを D3D11_SRC_ALPHA に設定します。 アルファ値のプリマルチプライの手順が実行されていない場合、前景スワップ チェーンのカラーは想定よりも明るくなります。

ハードウェアでサポートされている場合、フォアグラウンド スワップ チェーンではマルチプレーン オーバーレイが使用されます。 IDXGIOutput2::SupportsOverlays を呼び出して、オーバーレイのサポートをアダプターに照会します。

次の例では、CoreWindow のフォアグラウンド スワップ チェーンを作成します。


DXGI_SWAP_CHAIN_DESC1 swapChainDesc = { 0 };

swapChainDesc.Width = static_cast<UINT>(m_d3dRenderTargetSize.Width);
swapChainDesc.Height = static_cast<UINT>(m_d3dRenderTargetSize.Height);
swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
swapChainDesc.Stereo = false;
swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling.
swapChainDesc.SampleDesc.Quality = 0;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.BufferCount = 2;
swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER;
swapChainDesc.AlphaMode = DXGI_ALPHA_MODE_PREMULTIPLIED;
swapChainDesc.Scaling = DXGI_SCALING_NONE;

ComPtr<IDXGISwapChain1> swapChain;
HRESULT hr = dxgiFactory->CreateSwapChainForCoreWindow(
    m_d3dDevice.Get(),
    reinterpret_cast<IUnknown*>(m_window.Get()),
    &swapChainDesc,
    nullptr,
    &swapChain
    );

レンダリングが完了した後、両方のスワップ チェーンを一緒に表示します。

次の例では、両方のスワップ チェーンを示します。


HRESULT hr = m_swapChain->Present(1, 0);

if (SUCCEEDED(hr) && m_foregroundSwapChain)
{
    m_foregroundSwapChain->Present(1, 0);
}

要件

要件
サポートされている最小のクライアント Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 R2 のWindows Server 2012とプラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー dxgi1_2.h
Library Dxgi.lib

こちらもご覧ください

CoreWindow

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

IDXGIFactory2