IDXGISwapChain3
COM公式ドキュメント
IDXGISwapChain2 を拡張し、スワップチェーンの現在のバックバッファーのインデックスを取得するメソッドと、カラースペースのサポートを追加します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
スワップチェーンの現在のバックバッファーのインデックスを取得します。
戻り値
Type: UINT
現在のバックバッファーのインデックスを返します。
スワップチェーンのカラースペースのサポート状況を確認します。
| ColorSpace | DXGI_COLOR_SPACE_TYPE | in | サポート状況を確認するカラースペースの種類を指定する DXGI_COLOR_SPACE_TYPE 型の値です。 |
| pColorSpaceSupport | DWORD* | out | ビット単位の OR 演算で結合された DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG 型の値の組み合わせを受け取る変数へのポインターです。結果として得られる値は、カラースペースのサポートに関するオプションを表します。 |
戻り値
Type: HRESULT
このメソッドは成功すると S_OK を返します。それ以外の場合は、DXGI_ERROR のトピックで説明されているエラーコードのいずれかを返します。
スワップチェーンで使用するカラースペースを設定します。(IDXGISwapChain3.SetColorSpace1)
| ColorSpace | DXGI_COLOR_SPACE_TYPE | in | 設定するカラースペースを指定する DXGI_COLOR_SPACE_TYPE 型の値です。 |
戻り値
Type: HRESULT
このメソッドは成功すると S_OK を返します。それ以外の場合は、DXGI_ERROR のトピックで説明されているエラーコードのいずれかを返します。
D3D12 コマンドキューを入力デバイスとして作成されたスワップチェーンについて、そのバックバッファーのサイズ、フォーマット、およびバッファー数を変更します。これはアプリケーションのウィンドウがサイズ変更されたときに呼び出す必要があります。
| BufferCount | DWORD | in | スワップチェーン内のバッファー数(すべてのバックバッファーとフロントバッファーを含む)です。 この数は、スワップチェーンを作成したときのバッファー数と異なっていてもかまいません。 この数は DXGI_MAX_SWAP_CHAIN_BUFFERS を超えることはできません。 この数をゼロに設定すると、スワップチェーンの既存のバッファー数が維持されます。 フリップ表示(プレゼンテーション)モデルでは、2 つ未満のバッファーを指定することはできません。 |
| Width | DWORD | in | バックバッファーの新しい幅です。 ゼロを指定すると、DXGI はターゲットウィンドウのクライアント領域の幅を使用します。 コンポジションサーフェス用のスワップチェーンを作成するために IDXGIFactory2::CreateSwapChainForComposition メソッドを呼び出した場合は、幅にゼロを指定することはできません。 |
| Height | DWORD | in | バックバッファーの新しい高さです。 ゼロを指定すると、DXGI はターゲットウィンドウのクライアント領域の高さを使用します。 コンポジションサーフェス用のスワップチェーンを作成するために IDXGIFactory2::CreateSwapChainForComposition メソッドを呼び出した場合は、高さにゼロを指定することはできません。 |
| Format | DXGI_FORMAT | in | バックバッファーの新しいフォーマットを表す DXGI_FORMAT 型の値です。 この値を DXGI_FORMAT_UNKNOWN に設定すると、バックバッファーの既存のフォーマットが維持されます。 フリップ表示(プレゼンテーション)モデルでサポートされるフォーマットは、ビットブロック転送(bitblt)モデルよりも制限された範囲になります。 |
| SwapChainFlags | DWORD | in | ビット単位の OR 演算で結合された DXGI_SWAP_CHAIN_FLAG 型の値の組み合わせです。 結果として得られる値は、スワップチェーンの動作に関するオプションを指定します。 |
| pCreationNodeMask | DWORD* | in | 合計サイズが BufferCount の UINT 配列で、各値はバックバッファーを作成するノードを示します。 null 以外の pCreationNodeMask 配列を指定して ResizeBuffers1 で作成されたバッファーは、すべてのノードから参照できます。 |
| ppPresentQueue | IUnknown** | in | 合計サイズが BufferCount のコマンドキュー(ID3D12CommandQueue インスタンス)の配列です。 指定する各キューは、pCreationNodeMask 配列で指定した対応する作成ノードマスクと一致している必要があります。 Present() が呼び出されると、スワップチェーンは次のフレーム用の次のバッファーへ切り替えるのに加えて、これらのコマンドキューも順番に切り替えます。 これにより、アプリケーションは特定の表示(プレゼント)操作でどのキューを同期する必要があるかを制御できます。 |
戻り値
Type: HRESULT
成功した場合は S_OK を返します。それ以外の場合はエラーコードを返します。 エラーコードの一覧については、DXGI_ERROR を参照してください。
解説(Remarks)
このメソッドは、スワップチェーンが D3D12 コマンドキュー(ID3D12CommandQueue)を入力デバイスとして作成された場合にのみ呼び出すことができます。
マルチ GPU アダプター上でスワップチェーンが作成された場合、バックバッファーはすべてノード 1 に作成され、サポートされるコマンドキューは 1 つのみです。 ResizeBuffers1 を使用すると、アプリケーションは異なるノード上にバックバッファーを作成でき、ノードごとに異なるコマンドキューを使用できるようになります。 これらの機能により、スワップチェーンで Alternate Frame Rendering(AFR)手法を使用できます。 マルチアダプターシステムを参照してください。
IDXGISwapChain::ResizeBuffers の「解説(Remarks)」セクションも参照してください。その内容はすべて ResizeBuffers1 にも当てはまります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDXGISwapChain3 "{94D99BDB-F1F8-4AB0-B236-7DA0170EDAB1}" #usecom global IDXGISwapChain3 IID_IDXGISwapChain3 "{}" #comfunc global IDXGISwapChain3_GetCurrentBackBufferIndex 36 #comfunc global IDXGISwapChain3_CheckColorSpaceSupport 37 int,var #comfunc global IDXGISwapChain3_SetColorSpace1 38 int #comfunc global IDXGISwapChain3_ResizeBuffers1 39 int,int,int,int,int,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDXGISwapChain3 "{94D99BDB-F1F8-4AB0-B236-7DA0170EDAB1}" #usecom global IDXGISwapChain3 IID_IDXGISwapChain3 "{}" #comfunc global IDXGISwapChain3_GetCurrentBackBufferIndex 36 #comfunc global IDXGISwapChain3_CheckColorSpaceSupport 37 int,sptr #comfunc global IDXGISwapChain3_SetColorSpace1 38 int #comfunc global IDXGISwapChain3_ResizeBuffers1 39 int,int,int,int,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。