Win32 API 日本語リファレンス
ホームGraphics.Dxgi › IDXGIFactory2

IDXGIFactory2

COM
IID50c83a1c-e072-4c48-87b0-3630fa36a6d0継承元IDXGIFactory1自前メソッド開始 vtbl14

公式ドキュメント

IDXGIFactory2 インターフェイスには、IDXGISwapChain よりも多くの機能を持つ新しいバージョンのスワップチェーンを作成するメソッドや、ステレオスコピック 3D 機能を監視するメソッドが含まれます。

解説(Remarks)

Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 のファクトリインターフェイスを作成するには、IDXGIFactory2CreateDXGIFactory または CreateDXGIFactory1 関数に渡すか、CreateDXGIFactory または CreateDXGIFactory1 が返すファクトリオブジェクトに対して QueryInterface を呼び出します。

スワップチェーンを作成せずに Direct3D デバイスを作成できるため、スワップチェーンを作成するには、そのデバイスの作成に使用されたファクトリを取得する必要がある場合があります。 Direct3D デバイスから IDXGIDeviceIDXGIDevice1、または IDXGIDevice2 インターフェイスを要求し、IDXGIObject::GetParent メソッドを使用してファクトリを見つけることができます。次のコードにその方法を示します。

IDXGIDevice2 * pDXGIDevice;
hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice2), (void **)&pDXGIDevice);
      
IDXGIAdapter * pDXGIAdapter;
hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter);

IDXGIFactory2 * pIDXGIFactory;
pDXGIAdapter->GetParent(__uuidof(IDXGIFactory2), (void **)&pIDXGIFactory);

メソッド 11

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 14 BOOL IsWindowedStereoEnabled()

ステレオモードを使用するかどうかを判断します。

戻り値

ステレオモードを使用するかどうかを示します。TRUE はステレオモードを使用できることを示し、そうでない場合は FALSE です。

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、Platform Update for Windows 7 でステレオスコピック 3D 表示の動作が利用できないため、IsWindowedStereoEnabled は常に FALSE を返します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

解説(Remarks)

ウィンドウ表示のアプリケーションでは、ステレオを使用する前に IsWindowedStereoEnabled を呼び出すことをお勧めします。IsWindowedStereoEnabled は、次の両方の項目が真である場合に TRUE を返します。

最初の要件が満たされていれば、ウィンドウ表示のステレオスワップチェーンの作成は成功します。ただし、アダプターがステレオをスキャンアウトできない場合、そのアダプターの出力(アウトプット)は単眼に縮退します。

Direct3D 11.1 Simple Stereo 3D Sample は、ステレオスコピック 3D 効果を追加する方法と、システムのステレオ変更に応答する方法を示しています。

vtbl 15 HRESULT CreateSwapChainForHwnd(IUnknown* pDevice, HWND hWnd, DXGI_SWAP_CHAIN_DESC1* pDesc, DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pFullscreenDesc, IDXGIOutput* pRestrictToOutput, IDXGISwapChain1** ppSwapChain)

スワップチェーンの出力ウィンドウへの HWND ハンドルに関連付けられたスワップチェーンを作成します。

pDeviceIUnknown*inDirect3D 11 以前のバージョンの Direct3D では、これはスワップチェーン用の Direct3D デバイスへのポインターです。Direct3D 12 では、これはダイレクトコマンドキューへのポインターです(ID3D12CommandQueue を参照)。このパラメーターを NULL にすることはできません。
hWndHWNDinCreateSwapChainForHwnd が作成するスワップチェーンに関連付けられる HWND ハンドル。このパラメーターを NULL にすることはできません。
pDescDXGI_SWAP_CHAIN_DESC1*inスワップチェーンの記述用の DXGI_SWAP_CHAIN_DESC1 構造体へのポインター。このパラメーターを NULL にすることはできません。
pFullscreenDescDXGI_SWAP_CHAIN_FULLSCREEN_DESC*inoptional全画面スワップチェーンの記述用の DXGI_SWAP_CHAIN_FULLSCREEN_DESC 構造体へのポインター。全画面スワップチェーンを作成するために、このパラメーターを任意で設定できます。ウィンドウ表示のスワップチェーンを作成するには NULL を設定します。
pRestrictToOutputIDXGIOutput*inoptional

コンテンツを制限する対象の出力(アウトプット)用の IDXGIOutput インターフェイスへのポインター。他のすべての出力(アウトプット)でコンテンツを黒く表示させるには、IDXGISwapChain1::Present1 の呼び出しで DXGI_PRESENT_RESTRICT_TO_OUTPUT フラグも渡す必要があります。コンテンツを別の出力(アウトプット)に制限したい場合は、新しいスワップチェーンを作成する必要があります。ただし、DXGI_PRESENT_RESTRICT_TO_OUTPUT フラグに基づいて条件付きでコンテンツを制限することもできます。

出力(アウトプット)ターゲットにコンテンツを制限しない場合は、このパラメーターに NULL を設定します。

ppSwapChainIDXGISwapChain1**outCreateSwapChainForHwnd が作成するスワップチェーン用の IDXGISwapChain1 インターフェイスへのポインターを受け取る変数へのポインター。

戻り値

CreateSwapChainForHwnd は次を返します。

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では DXGI_SCALING_NONE はサポートされておらず、呼び出すと CreateSwapChainForHwndDXGI_ERROR_INVALID_CALL を返します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

解説(Remarks)

Note このメソッドは Windows ストアアプリでは使用しないでください。代わりに IDXGIFactory2::CreateSwapChainForCoreWindow を使用してください。
スワップチェーンの幅、高さ、またはその両方(pDesc が指す DXGI_SWAP_CHAIN_DESC1Width および Height メンバー)をゼロに指定した場合、ランタイムは hWnd パラメーターで指定された出力ウィンドウからサイズを取得します。

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

1 つの HWND には一度に 1 つのフリップ表示(プレゼント)モデルのスワップチェーンしか関連付けられないため、フリップ表示(プレゼント)モデルのスワップチェーンを破棄して別のスワップチェーンに置き換えようとすると、オブジェクトの破棄を遅延させる Microsoft Direct3D 11 のポリシーが問題を引き起こすことがあります。この状況の詳細については、Deferred Destruction Issues with Flip Presentation Swap Chains を参照してください。

スワップチェーンのバックバッファーのフォーマットを選択する方法については、Converting data for the color space を参照してください。

vtbl 16 HRESULT CreateSwapChainForCoreWindow(IUnknown* pDevice, IUnknown* pWindow, DXGI_SWAP_CHAIN_DESC1* pDesc, IDXGIOutput* pRestrictToOutput, IDXGISwapChain1** ppSwapChain)

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

pDeviceIUnknown*inDirect3D 11 以前のバージョンの Direct3D では、これはスワップチェーン用の Direct3D デバイスへのポインターです。Direct3D 12 では、これはダイレクトコマンドキューへのポインターです(ID3D12CommandQueue を参照)。このパラメーターを NULL にすることはできません。
pWindowIUnknown*inCreateSwapChainForCoreWindow が作成するスワップチェーンに関連付けられる CoreWindow オブジェクトへのポインター。
pDescDXGI_SWAP_CHAIN_DESC1*inスワップチェーンの記述用の DXGI_SWAP_CHAIN_DESC1 構造体へのポインター。このパラメーターを NULL にすることはできません。
pRestrictToOutputIDXGIOutput*inoptionalスワップチェーンの制限先となる IDXGIOutput インターフェイスへのポインター。スワップチェーンが別の出力(アウトプット)に移動されると、コンテンツは黒くなります。この出力(アウトプット)上でコンテンツを制限するために DXGI_PRESENT_RESTRICT_TO_OUTPUT を使用する出力(アウトプット)ターゲットを、このパラメーターに任意で設定できます。出力(アウトプット)ターゲット上でコンテンツを制限するためにこのパラメーターを設定しない場合は、NULL を設定できます。
ppSwapChainIDXGISwapChain1**outCreateSwapChainForCoreWindow が作成するスワップチェーン用の IDXGISwapChain1 インターフェイスへのポインターを受け取る変数へのポインター。

戻り値

CreateSwapChainForCoreWindow は次を返します。

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、CreateSwapChainForCoreWindowE_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

解説(Remarks)

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

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

1 つの CoreWindow には(レイヤーごとに)一度に 1 つのフリップ表示(プレゼント)モデルのスワップチェーンしか関連付けられないため、フリップ表示(プレゼント)モデルのスワップチェーンを破棄して別のスワップチェーンに置き換えようとすると、オブジェクトの破棄を遅延させる Microsoft Direct3D 11 のポリシーが問題を引き起こすことがあります。この状況の詳細については、Deferred Destruction Issues with Flip Presentation Swap Chains を参照してください。

スワップチェーンのバックバッファーのフォーマットを選択する方法については、Converting data for the color space を参照してください。

重なり合うスワップチェーン

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) に設定されます。アルファの事前乗算のステップは、D3D11_RENDER_TARGET_BLEND_DESC 構造体の SrcBlend フィールドを D3D11_SRC_ALPHA に設定したアプリのブレンドステート(ID3D11BlendState を参照)を適用することで、出力マージャーステージで実行できます。アルファの事前乗算のステップを行わないと、前景スワップチェーンの色は予期したよりも明るくなります。

前景スワップチェーンは、ハードウェアがサポートしている場合はマルチプレーンオーバーレイを使用します。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);
}
vtbl 17 HRESULT GetSharedResourceAdapterLuid(HANDLE hResource, LUID* pLuid)

共有リソースオブジェクトが作成されたアダプターを識別します。

hResourceHANDLEin共有リソースオブジェクトへのハンドル。IDXGIResource1::CreateSharedHandle メソッドがこのハンドルを返します。
pLuidLUID*outアダプターを識別するローカル一意識別子(LUID)の値を受け取る変数へのポインター。LUID は Dxgi.h で定義されています。LUID は 64 ビットの値で、生成されたオペレーティングシステム上でのみ一意であることが保証されます。LUID の一意性は、オペレーティングシステムが再起動されるまでの間のみ保証されます。

戻り値

GetSharedResourceAdapterLuid は次を返します。

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、GetSharedResourceAdapterLuidE_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

解説(Remarks)

アダプターをまたいでリソースを共有することはできません。したがって、リソースが作成されたアダプター以外のアダプターで共有リソースを開くことはできません。共有リソースを開く前に GetSharedResourceAdapterLuid を呼び出して、リソースが適切なアダプターで作成されたことを確認してください。共有リソースを開くには、ID3D11Device1::OpenSharedResource1 または ID3D11Device1::OpenSharedResourceByName メソッドを呼び出します。

HANDLE handle;
IDXGIFactory2* pFactory;

LUID luid;
pFactory->GetSharedResourceAdapterLuid (handle, &luid);

UINT index = 0;
IDXGIAdapter* pAdapter = NULL;
while (SUCCEEDED(pFactory->EnumAdapters(index, &pAdapter)))
{
    DXGI_ADAPTER_DESC desc;
    pAdapter->GetDesc(&desc);
    if (desc.AdapterLuid == luid)
    {
       // Identified a matching adapter.
       break;
    }
    pAdapter->Release();
    pAdapter = NULL;
    index++;
}
// At this point, if pAdapter is non-null, you identified an adapter that 
// can open the shared resource.
vtbl 18 HRESULT RegisterStereoStatusWindow(HWND WindowHandle, DWORD wMsg, DWORD* pdwCookie)

ステレオ状態の変化の通知メッセージを受け取るために、アプリケーションウィンドウを登録します。

WindowHandleHWNDinステレオ状態の変化が発生したときに通知メッセージを送信する先のウィンドウのハンドル。
wMsgDWORDin送信する通知メッセージを指定します。
pdwCookieDWORD*outwMsg で指定した通知メッセージの登録を解除するために、アプリケーションが IDXGIFactory2::UnregisterStereoStatus メソッドに渡すことのできるキー値へのポインター。

戻り値

RegisterStereoStatusWindow は次を返します。

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、RegisterStereoStatusWindowE_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

vtbl 19 HRESULT RegisterStereoStatusEvent(HANDLE hEvent, DWORD* pdwCookie)

イベントシグナルを使用して、ステレオ状態の変化の通知を受け取るために登録します。

hEventHANDLEinステレオ状態の変化の通知が発生したときにオペレーティングシステムがセットするイベントオブジェクトへのハンドル。CreateEvent または OpenEvent 関数がこのハンドルを返します。
pdwCookieDWORD*outhEvent で指定した通知イベントの登録を解除するために、アプリケーションが IDXGIFactory2::UnregisterStereoStatus メソッドに渡すことのできるキー値へのポインター。

戻り値

RegisterStereoStatusEvent は次を返します。

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、RegisterStereoStatusEventE_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

vtbl 20 void UnregisterStereoStatus(DWORD dwCookie)

ステレオ状態が変化したときに通知を受け取らないように、ウィンドウまたはイベントの登録を解除します。

dwCookieDWORDin登録を解除するウィンドウまたはイベントのキー値。IDXGIFactory2::RegisterStereoStatusWindow または IDXGIFactory2::RegisterStereoStatusEvent メソッドがこの値を返します。

解説(Remarks)

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、UnregisterStereoStatus は効果がありません。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

vtbl 21 HRESULT RegisterOcclusionStatusWindow(HWND WindowHandle, DWORD wMsg, DWORD* pdwCookie)

オクルージョン状態の変化の通知メッセージを受け取るために、アプリケーションウィンドウを登録します。

WindowHandleHWNDinオクルージョン状態の変化が発生したときに通知メッセージを送信する先のウィンドウのハンドル。
wMsgDWORDin送信する通知メッセージを指定します。
pdwCookieDWORD*outwMsg で指定した通知メッセージの登録を解除するために、アプリケーションが IDXGIFactory2::UnregisterOcclusionStatus メソッドに渡すことのできるキー値へのポインター。

戻り値

RegisterOcclusionStatusWindow は次を返します。

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、RegisterOcclusionStatusWindowE_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

解説(Remarks)

アプリは、オクルージョン状態が変化したときに Windows が送信する Windows メッセージを選択します。

vtbl 22 HRESULT RegisterOcclusionStatusEvent(HANDLE hEvent, DWORD* pdwCookie)

イベントシグナルを使用して、オクルージョン状態の変化の通知を受け取るために登録します。

hEventHANDLEinオクルージョン状態の変化の通知が発生したときにオペレーティングシステムがセットするイベントオブジェクトへのハンドル。CreateEvent または OpenEvent 関数がこのハンドルを返します。
pdwCookieDWORD*outhEvent で指定した通知イベントの登録を解除するために、アプリケーションが IDXGIFactory2::UnregisterOcclusionStatus メソッドに渡すことのできるキー値へのポインター。

戻り値

RegisterOcclusionStatusEvent は次を返します。

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、RegisterOcclusionStatusEventE_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

解説(Remarks)

同じイベントハンドルで RegisterOcclusionStatusEvent を複数回呼び出した場合、RegisterOcclusionStatusEventDXGI_ERROR_INVALID_CALL で失敗します。

異なるイベントハンドルで RegisterOcclusionStatusEvent を複数回呼び出した場合、RegisterOcclusionStatusEvent はイベントを適切に登録します。

vtbl 23 void UnregisterOcclusionStatus(DWORD dwCookie)

オクルージョン状態が変化したときに通知を受け取らないように、ウィンドウまたはイベントの登録を解除します。

dwCookieDWORDin登録を解除するウィンドウまたはイベントのキー値。IDXGIFactory2::RegisterOcclusionStatusWindow または IDXGIFactory2::RegisterOcclusionStatusEvent メソッドがこの値を返します。

解説(Remarks)

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、UnregisterOcclusionStatus は効果がありません。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

vtbl 24 HRESULT CreateSwapChainForComposition(IUnknown* pDevice, DXGI_SWAP_CHAIN_DESC1* pDesc, IDXGIOutput* pRestrictToOutput, IDXGISwapChain1** ppSwapChain)

Direct3D のコンテンツを DirectComposition API または Xaml フレームワークに送信してウィンドウ内で合成するために使用できるスワップチェーンを作成します。

pDeviceIUnknown*inDirect3D 11 以前のバージョンの Direct3D では、これはスワップチェーン用の Direct3D デバイスへのポインターです。Direct3D 12 では、これはダイレクトコマンドキューへのポインターです(ID3D12CommandQueue を参照)。このパラメーターを NULL にすることはできません。D3D_DRIVER_TYPE_REFERENCE のようなソフトウェアドライバーは、合成スワップチェーンではサポートされていません。
pDescDXGI_SWAP_CHAIN_DESC1*in

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

CreateSwapChainForCompositionフリップ表示(プレゼント)モデルのみをサポートするため、DXGI_SWAP_CHAIN_DESC1SwapEffect メンバーに DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL の値を指定する必要があります。

また、DXGI_SWAP_CHAIN_DESC1Scaling メンバーに DXGI_SCALING_STRETCH の値を指定する必要があります。

pRestrictToOutputIDXGIOutput*inoptional

コンテンツを制限する対象の出力(アウトプット)用の IDXGIOutput インターフェイスへのポインター。他のすべての出力(アウトプット)でコンテンツを黒く表示させるには、IDXGISwapChain1::Present1 の呼び出しで DXGI_PRESENT_RESTRICT_TO_OUTPUT フラグも渡す必要があります。コンテンツを別の出力(アウトプット)に制限したい場合は、新しいスワップチェーンを作成する必要があります。ただし、DXGI_PRESENT_RESTRICT_TO_OUTPUT フラグに基づいて条件付きでコンテンツを制限することもできます。

出力(アウトプット)ターゲットにコンテンツを制限しない場合は、このパラメーターに NULL を設定します。

ppSwapChainIDXGISwapChain1**outCreateSwapChainForComposition が作成するスワップチェーン用の IDXGISwapChain1 インターフェイスへのポインターを受け取る変数へのポインター。

戻り値

CreateSwapChainForComposition は次を返します。

Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、CreateSwapChainForCompositionE_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

解説(Remarks)

合成スワップチェーンは、次のいずれかと共に使用できます。

DirectComposition では、IDCompositionVisual::SetContent メソッドを呼び出してスワップチェーンをビジュアルオブジェクトのコンテンツとして設定でき、これによってスワップチェーンをビジュアルツリーにバインドできます。XAML では、SwapChainBackgroundPanel クラスがクラシックな COM インターフェイス ISwapChainBackgroundPanelNative を公開します。ISwapChainBackgroundPanelNative::SetSwapChain メソッドを使用して XAML UI グラフにバインドできます。XAML の SwapChainBackgroundPanel クラスで合成スワップチェーンを使用する方法については、DirectX and XAML interop を参照してください。

IDXGISwapChain::SetFullscreenStateIDXGISwapChain::ResizeTargetIDXGISwapChain::GetContainingOutputIDXGISwapChain1::GetHwnd、および IDXGISwapChain::GetCoreWindow の各メソッドは、この種類のスワップチェーンでは有効ではありません。この種類のスワップチェーンでこれらのメソッドのいずれかを呼び出すと、失敗します。

スワップチェーンのバックバッファーのフォーマットを選択する方法については、Converting data for the color space を参照してください。

CreateSwapChainForComposition の使用方法を示すコード例については、SwapChainPanel and gaming を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDXGIFactory2 "{50C83A1C-E072-4C48-87B0-3630FA36A6D0}"
#usecom global IDXGIFactory2 IID_IDXGIFactory2 "{}"
#comfunc global IDXGIFactory2_IsWindowedStereoEnabled        14
#comfunc global IDXGIFactory2_CreateSwapChainForHwnd         15 sptr,sptr,var,var,sptr,sptr
#comfunc global IDXGIFactory2_CreateSwapChainForCoreWindow   16 sptr,sptr,var,sptr,sptr
#comfunc global IDXGIFactory2_GetSharedResourceAdapterLuid   17 sptr,var
#comfunc global IDXGIFactory2_RegisterStereoStatusWindow     18 sptr,int,var
#comfunc global IDXGIFactory2_RegisterStereoStatusEvent      19 sptr,var
#comfunc global IDXGIFactory2_UnregisterStereoStatus         20 int
#comfunc global IDXGIFactory2_RegisterOcclusionStatusWindow  21 sptr,int,var
#comfunc global IDXGIFactory2_RegisterOcclusionStatusEvent   22 sptr,var
#comfunc global IDXGIFactory2_UnregisterOcclusionStatus      23 int
#comfunc global IDXGIFactory2_CreateSwapChainForComposition  24 sptr,var,sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。