IDXGIFactory2
COM公式ドキュメント
IDXGIFactory2 インターフェイスには、IDXGISwapChain よりも多くの機能を持つ新しいバージョンのスワップチェーンを作成するメソッドや、ステレオスコピック 3D 機能を監視するメソッドが含まれます。
解説(Remarks)
Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 のファクトリインターフェイスを作成するには、IDXGIFactory2 を CreateDXGIFactory または CreateDXGIFactory1 関数に渡すか、CreateDXGIFactory または CreateDXGIFactory1 が返すファクトリオブジェクトに対して QueryInterface を呼び出します。
スワップチェーンを作成せずに Direct3D デバイスを作成できるため、スワップチェーンを作成するには、そのデバイスの作成に使用されたファクトリを取得する必要がある場合があります。 Direct3D デバイスから IDXGIDevice、IDXGIDevice1、または 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。
ステレオモードを使用するかどうかを判断します。
戻り値
ステレオモードを使用するかどうかを示します。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 を返します。
- コンピューター内のすべてのアダプターが、ステレオに対応したドライバーを備えている。これは、そのドライバーが Windows 8 向けの Windows Display Driver Model (WDDM)(WDDM 1.2)に準拠して実装されていることを意味するにすぎません。ただし、アダプターが必ずしもステレオをスキャンアウトできる必要はありません。
- 現在のデスクトップモード(デスクトップモードは単眼)、システムポリシー、およびハードウェアが、Desktop Window Manager (DWM) が少なくとも 1 つのアダプター出力(アウトプット)でステレオ合成を実行するように構成されている。
Direct3D 11.1 Simple Stereo 3D Sample は、ステレオスコピック 3D 効果を追加する方法と、システムのステレオ変更に応答する方法を示しています。
スワップチェーンの出力ウィンドウへの HWND ハンドルに関連付けられたスワップチェーンを作成します。
| pDevice | IUnknown* | in | Direct3D 11 以前のバージョンの Direct3D では、これはスワップチェーン用の Direct3D デバイスへのポインターです。Direct3D 12 では、これはダイレクトコマンドキューへのポインターです(ID3D12CommandQueue を参照)。このパラメーターを NULL にすることはできません。 |
| hWnd | HWND | in | CreateSwapChainForHwnd が作成するスワップチェーンに関連付けられる HWND ハンドル。このパラメーターを NULL にすることはできません。 |
| pDesc | DXGI_SWAP_CHAIN_DESC1* | in | スワップチェーンの記述用の DXGI_SWAP_CHAIN_DESC1 構造体へのポインター。このパラメーターを NULL にすることはできません。 |
| pFullscreenDesc | DXGI_SWAP_CHAIN_FULLSCREEN_DESC* | inoptional | 全画面スワップチェーンの記述用の DXGI_SWAP_CHAIN_FULLSCREEN_DESC 構造体へのポインター。全画面スワップチェーンを作成するために、このパラメーターを任意で設定できます。ウィンドウ表示のスワップチェーンを作成するには NULL を設定します。 |
| pRestrictToOutput | IDXGIOutput* | inoptional | コンテンツを制限する対象の出力(アウトプット)用の IDXGIOutput インターフェイスへのポインター。他のすべての出力(アウトプット)でコンテンツを黒く表示させるには、IDXGISwapChain1::Present1 の呼び出しで DXGI_PRESENT_RESTRICT_TO_OUTPUT フラグも渡す必要があります。コンテンツを別の出力(アウトプット)に制限したい場合は、新しいスワップチェーンを作成する必要があります。ただし、DXGI_PRESENT_RESTRICT_TO_OUTPUT フラグに基づいて条件付きでコンテンツを制限することもできます。 出力(アウトプット)ターゲットにコンテンツを制限しない場合は、このパラメーターに NULL を設定します。 |
| ppSwapChain | IDXGISwapChain1** | out | CreateSwapChainForHwnd が作成するスワップチェーン用の IDXGISwapChain1 インターフェイスへのポインターを受け取る変数へのポインター。 |
戻り値
CreateSwapChainForHwnd は次を返します。
- スワップチェーンの作成に成功した場合は S_OK。
- 操作を完了するためのメモリが利用できない場合は E_OUTOFMEMORY。
- 呼び出し元のアプリケーションが無効なデータを渡した場合(たとえば pDesc または ppSwapChain が NULL の場合、または pDesc のデータメンバーが無効な場合)は DXGI_ERROR_INVALID_CALL。
- pDevice に渡すデバイスの種類によって定義される、DXGI_ERROR トピックで説明されているその他のエラーコードが返される場合があります。
Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では DXGI_SCALING_NONE はサポートされておらず、呼び出すと CreateSwapChainForHwnd は DXGI_ERROR_INVALID_CALL を返します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。
解説(Remarks)
その後、IDXGISwapChain1::GetDesc1 メソッドを呼び出して、割り当てられた幅または高さの値を取得できます。
1 つの HWND には一度に 1 つのフリップ表示(プレゼント)モデルのスワップチェーンしか関連付けられないため、フリップ表示(プレゼント)モデルのスワップチェーンを破棄して別のスワップチェーンに置き換えようとすると、オブジェクトの破棄を遅延させる Microsoft Direct3D 11 のポリシーが問題を引き起こすことがあります。この状況の詳細については、Deferred Destruction Issues with Flip Presentation Swap Chains を参照してください。
スワップチェーンのバックバッファーのフォーマットを選択する方法については、Converting data for the color space を参照してください。
スワップチェーンの出力ウィンドウ用の CoreWindow オブジェクトに関連付けられたスワップチェーンを作成します。
| pDevice | IUnknown* | in | Direct3D 11 以前のバージョンの Direct3D では、これはスワップチェーン用の Direct3D デバイスへのポインターです。Direct3D 12 では、これはダイレクトコマンドキューへのポインターです(ID3D12CommandQueue を参照)。このパラメーターを NULL にすることはできません。 |
| pWindow | IUnknown* | in | CreateSwapChainForCoreWindow が作成するスワップチェーンに関連付けられる CoreWindow オブジェクトへのポインター。 |
| pDesc | DXGI_SWAP_CHAIN_DESC1* | in | スワップチェーンの記述用の DXGI_SWAP_CHAIN_DESC1 構造体へのポインター。このパラメーターを NULL にすることはできません。 |
| pRestrictToOutput | IDXGIOutput* | inoptional | スワップチェーンの制限先となる IDXGIOutput インターフェイスへのポインター。スワップチェーンが別の出力(アウトプット)に移動されると、コンテンツは黒くなります。この出力(アウトプット)上でコンテンツを制限するために DXGI_PRESENT_RESTRICT_TO_OUTPUT を使用する出力(アウトプット)ターゲットを、このパラメーターに任意で設定できます。出力(アウトプット)ターゲット上でコンテンツを制限するためにこのパラメーターを設定しない場合は、NULL を設定できます。 |
| ppSwapChain | IDXGISwapChain1** | out | CreateSwapChainForCoreWindow が作成するスワップチェーン用の IDXGISwapChain1 インターフェイスへのポインターを受け取る変数へのポインター。 |
戻り値
CreateSwapChainForCoreWindow は次を返します。
- スワップチェーンの作成に成功した場合は S_OK。
- 操作を完了するためのメモリが利用できない場合は E_OUTOFMEMORY。
- 呼び出し元のアプリケーションが無効なデータを渡した場合(たとえば pDesc または ppSwapChain が NULL の場合)は DXGI_ERROR_INVALID_CALL。
- pDevice に渡すデバイスの種類によって定義される、DXGI_ERROR トピックで説明されているその他のエラーコードが返される場合があります。
Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、CreateSwapChainForCoreWindow は E_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。
解説(Remarks)
その後、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_DESC1 で DXGI_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);
}
共有リソースオブジェクトが作成されたアダプターを識別します。
| hResource | HANDLE | in | 共有リソースオブジェクトへのハンドル。IDXGIResource1::CreateSharedHandle メソッドがこのハンドルを返します。 |
| pLuid | LUID* | out | アダプターを識別するローカル一意識別子(LUID)の値を受け取る変数へのポインター。LUID は Dxgi.h で定義されています。LUID は 64 ビットの値で、生成されたオペレーティングシステム上でのみ一意であることが保証されます。LUID の一意性は、オペレーティングシステムが再起動されるまでの間のみ保証されます。 |
戻り値
GetSharedResourceAdapterLuid は次を返します。
- アダプターを識別した場合は S_OK。
- hResource が無効な場合は DXGI_ERROR_INVALID_CALL。
- DXGI_ERROR トピックで説明されているその他のエラーコードが返される場合があります。
Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、GetSharedResourceAdapterLuid は E_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.
ステレオ状態の変化の通知メッセージを受け取るために、アプリケーションウィンドウを登録します。
| WindowHandle | HWND | in | ステレオ状態の変化が発生したときに通知メッセージを送信する先のウィンドウのハンドル。 |
| wMsg | DWORD | in | 送信する通知メッセージを指定します。 |
| pdwCookie | DWORD* | out | wMsg で指定した通知メッセージの登録を解除するために、アプリケーションが IDXGIFactory2::UnregisterStereoStatus メソッドに渡すことのできるキー値へのポインター。 |
戻り値
RegisterStereoStatusWindow は次を返します。
- ウィンドウの登録に成功した場合は S_OK。
- 操作を完了するためのメモリが利用できない場合は E_OUTOFMEMORY。
- DXGI_ERROR トピックで説明されているその他のエラーコードが返される場合があります。
Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、RegisterStereoStatusWindow は E_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。
イベントシグナルを使用して、ステレオ状態の変化の通知を受け取るために登録します。
| hEvent | HANDLE | in | ステレオ状態の変化の通知が発生したときにオペレーティングシステムがセットするイベントオブジェクトへのハンドル。CreateEvent または OpenEvent 関数がこのハンドルを返します。 |
| pdwCookie | DWORD* | out | hEvent で指定した通知イベントの登録を解除するために、アプリケーションが IDXGIFactory2::UnregisterStereoStatus メソッドに渡すことのできるキー値へのポインター。 |
戻り値
RegisterStereoStatusEvent は次を返します。
- イベントの登録に成功した場合は S_OK。
- 操作を完了するためのメモリが利用できない場合は E_OUTOFMEMORY。
- DXGI_ERROR トピックで説明されているその他のエラーコードが返される場合があります。
Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、RegisterStereoStatusEvent は E_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。
ステレオ状態が変化したときに通知を受け取らないように、ウィンドウまたはイベントの登録を解除します。
| dwCookie | DWORD | in | 登録を解除するウィンドウまたはイベントのキー値。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 を参照してください。
オクルージョン状態の変化の通知メッセージを受け取るために、アプリケーションウィンドウを登録します。
| WindowHandle | HWND | in | オクルージョン状態の変化が発生したときに通知メッセージを送信する先のウィンドウのハンドル。 |
| wMsg | DWORD | in | 送信する通知メッセージを指定します。 |
| pdwCookie | DWORD* | out | wMsg で指定した通知メッセージの登録を解除するために、アプリケーションが IDXGIFactory2::UnregisterOcclusionStatus メソッドに渡すことのできるキー値へのポインター。 |
戻り値
RegisterOcclusionStatusWindow は次を返します。
- ウィンドウの登録に成功した場合は S_OK。
- 操作を完了するためのメモリが利用できない場合は E_OUTOFMEMORY。
- WindowHandle が有効なウィンドウハンドルでない場合、または現在のプロセスが所有するウィンドウハンドルでない場合は DXGI_ERROR_INVALID_CALL。
- DXGI_ERROR トピックで説明されているその他のエラーコードが返される場合があります。
Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、RegisterOcclusionStatusWindow は E_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。
解説(Remarks)
アプリは、オクルージョン状態が変化したときに Windows が送信する Windows メッセージを選択します。
イベントシグナルを使用して、オクルージョン状態の変化の通知を受け取るために登録します。
| hEvent | HANDLE | in | オクルージョン状態の変化の通知が発生したときにオペレーティングシステムがセットするイベントオブジェクトへのハンドル。CreateEvent または OpenEvent 関数がこのハンドルを返します。 |
| pdwCookie | DWORD* | out | hEvent で指定した通知イベントの登録を解除するために、アプリケーションが IDXGIFactory2::UnregisterOcclusionStatus メソッドに渡すことのできるキー値へのポインター。 |
戻り値
RegisterOcclusionStatusEvent は次を返します。
- メソッドがイベントの登録に成功した場合は S_OK。
- 操作を完了するためのメモリが利用できない場合は E_OUTOFMEMORY。
- hEvent が有効なハンドルでない場合、またはイベントハンドルでない場合は DXGI_ERROR_INVALID_CALL。
- DXGI_ERROR トピックで説明されているその他のエラーコードが返される場合があります。
Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、RegisterOcclusionStatusEvent は E_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。
解説(Remarks)
同じイベントハンドルで RegisterOcclusionStatusEvent を複数回呼び出した場合、RegisterOcclusionStatusEvent は DXGI_ERROR_INVALID_CALL で失敗します。
異なるイベントハンドルで RegisterOcclusionStatusEvent を複数回呼び出した場合、RegisterOcclusionStatusEvent はイベントを適切に登録します。
オクルージョン状態が変化したときに通知を受け取らないように、ウィンドウまたはイベントの登録を解除します。
| dwCookie | DWORD | in | 登録を解除するウィンドウまたはイベントのキー値。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 を参照してください。
Direct3D のコンテンツを DirectComposition API または Xaml フレームワークに送信してウィンドウ内で合成するために使用できるスワップチェーンを作成します。
| pDevice | IUnknown* | in | Direct3D 11 以前のバージョンの Direct3D では、これはスワップチェーン用の Direct3D デバイスへのポインターです。Direct3D 12 では、これはダイレクトコマンドキューへのポインターです(ID3D12CommandQueue を参照)。このパラメーターを NULL にすることはできません。D3D_DRIVER_TYPE_REFERENCE のようなソフトウェアドライバーは、合成スワップチェーンではサポートされていません。 |
| pDesc | DXGI_SWAP_CHAIN_DESC1* | in | スワップチェーンの記述用の DXGI_SWAP_CHAIN_DESC1 構造体へのポインター。このパラメーターを NULL にすることはできません。 CreateSwapChainForComposition はフリップ表示(プレゼント)モデルのみをサポートするため、DXGI_SWAP_CHAIN_DESC1 の SwapEffect メンバーに DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL の値を指定する必要があります。 また、DXGI_SWAP_CHAIN_DESC1 の Scaling メンバーに DXGI_SCALING_STRETCH の値を指定する必要があります。 |
| pRestrictToOutput | IDXGIOutput* | inoptional | コンテンツを制限する対象の出力(アウトプット)用の IDXGIOutput インターフェイスへのポインター。他のすべての出力(アウトプット)でコンテンツを黒く表示させるには、IDXGISwapChain1::Present1 の呼び出しで DXGI_PRESENT_RESTRICT_TO_OUTPUT フラグも渡す必要があります。コンテンツを別の出力(アウトプット)に制限したい場合は、新しいスワップチェーンを作成する必要があります。ただし、DXGI_PRESENT_RESTRICT_TO_OUTPUT フラグに基づいて条件付きでコンテンツを制限することもできます。 出力(アウトプット)ターゲットにコンテンツを制限しない場合は、このパラメーターに NULL を設定します。 |
| ppSwapChain | IDXGISwapChain1** | out | CreateSwapChainForComposition が作成するスワップチェーン用の IDXGISwapChain1 インターフェイスへのポインターを受け取る変数へのポインター。 |
戻り値
CreateSwapChainForComposition は次を返します。
- スワップチェーンの作成に成功した場合は S_OK。
- 操作を完了するためのメモリが利用できない場合は E_OUTOFMEMORY。
- 呼び出し元のアプリケーションが無効なデータを渡した場合(たとえば pDesc または ppSwapChain が NULL の場合)は DXGI_ERROR_INVALID_CALL。
- pDevice に渡すデバイスの種類によって定義される、DXGI_ERROR トピックで説明されているその他のエラーコードが返される場合があります。
Platform Update for Windows 7: Platform Update for Windows 7 がインストールされた Windows 7 または Windows Server 2008 R2 では、CreateSwapChainForComposition は E_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。
解説(Remarks)
合成スワップチェーンは、次のいずれかと共に使用できます。
- DirectComposition の IDCompositionVisual インターフェイス。
- システム XAML の SwapChainPanel または SwapChainBackgroundPanel クラス。
- Windows UI Library (WinUI) 3 XAML の SwapChainPanel または SwapChainBackgroundPanel クラス。
DirectComposition では、IDCompositionVisual::SetContent メソッドを呼び出してスワップチェーンをビジュアルオブジェクトのコンテンツとして設定でき、これによってスワップチェーンをビジュアルツリーにバインドできます。XAML では、SwapChainBackgroundPanel クラスがクラシックな COM インターフェイス ISwapChainBackgroundPanelNative を公開します。ISwapChainBackgroundPanelNative::SetSwapChain メソッドを使用して XAML UI グラフにバインドできます。XAML の SwapChainBackgroundPanel クラスで合成スワップチェーンを使用する方法については、DirectX and XAML interop を参照してください。
IDXGISwapChain::SetFullscreenState、IDXGISwapChain::ResizeTarget、IDXGISwapChain::GetContainingOutput、IDXGISwapChain1::GetHwnd、および IDXGISwapChain::GetCoreWindow の各メソッドは、この種類のスワップチェーンでは有効ではありません。この種類のスワップチェーンでこれらのメソッドのいずれかを呼び出すと、失敗します。
スワップチェーンのバックバッファーのフォーマットを選択する方法については、Converting data for the color space を参照してください。
例
CreateSwapChainForComposition の使用方法を示すコード例については、SwapChainPanel and gaming を参照してください。
- WinRT XAML では、ISwapChainPanelNative および ISwapChainBackgroundPanelNative インターフェイスは
windows.ui.xaml.media.dxinterop.hヘッダーで宣言されています。 - Windows UI Library (WinUI) XAML では、ISwapChainPanelNative および ISwapChainBackgroundPanelNative インターフェイスは
microsoft.ui.xaml.media.dxinterop.hヘッダーで宣言されています。
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 指定が可能。#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,sptr,sptr,sptr,sptr #comfunc global IDXGIFactory2_CreateSwapChainForCoreWindow 16 sptr,sptr,sptr,sptr,sptr #comfunc global IDXGIFactory2_GetSharedResourceAdapterLuid 17 sptr,sptr #comfunc global IDXGIFactory2_RegisterStereoStatusWindow 18 sptr,int,sptr #comfunc global IDXGIFactory2_RegisterStereoStatusEvent 19 sptr,sptr #comfunc global IDXGIFactory2_UnregisterStereoStatus 20 int #comfunc global IDXGIFactory2_RegisterOcclusionStatusWindow 21 sptr,int,sptr #comfunc global IDXGIFactory2_RegisterOcclusionStatusEvent 22 sptr,sptr #comfunc global IDXGIFactory2_UnregisterOcclusionStatus 23 int #comfunc global IDXGIFactory2_CreateSwapChainForComposition 24 sptr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。