IDXGISwapChain2
COM公式ドキュメント
IDXGISwapChain1 を拡張し、スワップチェーンのバックバッファーのスケーリングや、より低遅延なスワップチェーンをサポートするメソッドを提供します。
解説(Remarks)
スワップチェーンは、 IDXGIFactory2::CreateSwapChainForHwnd、IDXGIFactory2::CreateSwapChainForCoreWindow、または IDXGIFactory2::CreateSwapChainForComposition を呼び出すことで作成できます。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
スワップチェーンに使用するソース領域を設定します。
| Width | DWORD | in | スワップチェーンに使用するソースの幅。この値は 0 より大きく、スワップチェーン全体の幅以下でなければなりません。 |
| Height | DWORD | in | スワップチェーンに使用するソースの高さ。この値は 0 より大きく、スワップチェーン全体の高さ以下でなければなりません。 |
戻り値
このメソッドは次を返すことがあります。
- 1 つ以上のパラメーターがバックバッファーのサイズを超えている場合は E_INVALIDARG。
- DXGI_ERROR のトピックで説明されているその他のエラーコードが返される可能性もあります。
スワップチェーンに使用されているソース領域を取得します。
| pWidth | DWORD* | out | スワップチェーンのソース領域の現在の幅。この値は 1 からスワップチェーン全体の幅までの範囲を取ります。 |
| pHeight | DWORD* | out | スワップチェーンのソース領域の現在の高さ。この値は 1 からスワップチェーン全体の高さまでの範囲を取ります。 |
戻り値
このメソッドは、DXGI_ERROR のトピックで説明されているエラーコードを返すことがあります。
スワップチェーンがレンダリングのためにキューに入れることを許可されるフレーム数を設定します。
| MaxLatency | DWORD | in | スワップチェーンでキューに入れられるバックバッファーフレームの最大数。この値は既定で 1 です。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合、デバイスが削除されたときは DXGI_ERROR_DEVICE_REMOVED を返します。
解説(Remarks)
このメソッドは、DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT を指定して作成されたスワップチェーンに対してのみ有効です。それ以外の場合、結果は DXGI_ERROR_INVALID_CALL になります。
スワップチェーンがレンダリングのためにキューに入れることを許可されるフレーム数を取得します。
| pMaxLatency | DWORD* | out | スワップチェーンでキューに入れられるバックバッファーフレームの最大数。この値は既定で 1 ですが、シーンの描画に 1 回の垂直リフレッシュ(通常は約 16ms)よりも長い時間がかかる場合は 2 に設定してください。 |
戻り値
成功した場合は S_OK を返します。それ以外の場合は、D3DERR 列挙型の次のメンバーのいずれかを返します。
- D3DERR_DEVICELOST
- D3DERR_DEVICEREMOVED
- D3DERR_DRIVERINTERNALERROR
- D3DERR_INVALIDCALL
- D3DERR_OUTOFVIDEOMEMORY
DXGI アダプターが新しいフレームの表示(プレゼント)を完了したときにシグナル状態になる待機可能なハンドルを返します。
戻り値
待機可能オブジェクトへのハンドル。スワップチェーンが DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT を指定して作成されていない場合は NULL。
解説(Remarks)
アプリケーションが IDXGISwapChain2::GetFrameLatencyWaitableObject によって返されたオブジェクトハンドルの使用を終えたら、CloseHandle 関数を使用してハンドルを閉じてください。
次回の表示(プレゼント)時にコンポジションスワップチェーンに適用される変換行列を設定します。
| pMatrix | DXGI_MATRIX_3X2_F* | in | スワップチェーンのスケーリングと平行移動に使用する変換行列。この関数は、IDXGIFactory2::CreateSwapChainForComposition によって作成されたコンポジションスワップチェーンでのみ使用できます。行列にはスケールと平行移動の成分のみが許可されます。 |
戻り値
SetMatrixTransform は次を返します。
- 変換行列の設定に成功した場合は S_OK。
- pMatrix パラメーターが正しくない場合、たとえば pMatrix が NULL である場合や、DXGI_MATRIX_3X2_F で表される行列にスケールと平行移動以外の成分が含まれている場合は E_INVALIDARG。
- CreateSwapChainForComposition を指定せずに作成されたスワップチェーンに対してこのメソッドが呼び出された場合は DXGI_ERROR_INVALID_CALL。
- DXGI_ERROR のトピックで説明されているその他のエラーコードが返される可能性もあります。
次回の表示(プレゼント)時にコンポジションスワップチェーンに適用される変換行列を取得します。
| pMatrix | DXGI_MATRIX_3X2_F* | out | [out] スワップチェーンのスケーリングと平行移動に現在使用されている変換行列。 |
戻り値
GetMatrixTransform は次を返します。
- 変換行列の取得に成功した場合は S_OK。
- CreateSwapChainForComposition を指定せずに作成されたスワップチェーンに対してこのメソッドが呼び出された場合は DXGI_ERROR_INVALID_CALL。
- DXGI_ERROR のトピックで説明されているその他のエラーコードが返される可能性もあります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDXGISwapChain2 "{A8BE2AC4-199F-4946-B331-79599FB98DE7}" #usecom global IDXGISwapChain2 IID_IDXGISwapChain2 "{}" #comfunc global IDXGISwapChain2_SetSourceSize 29 int,int #comfunc global IDXGISwapChain2_GetSourceSize 30 var,var #comfunc global IDXGISwapChain2_SetMaximumFrameLatency 31 int #comfunc global IDXGISwapChain2_GetMaximumFrameLatency 32 var #comfunc global IDXGISwapChain2_GetFrameLatencyWaitableObject 33 #comfunc global IDXGISwapChain2_SetMatrixTransform 34 var #comfunc global IDXGISwapChain2_GetMatrixTransform 35 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IDXGISwapChain2 "{A8BE2AC4-199F-4946-B331-79599FB98DE7}" #usecom global IDXGISwapChain2 IID_IDXGISwapChain2 "{}" #comfunc global IDXGISwapChain2_SetSourceSize 29 int,int #comfunc global IDXGISwapChain2_GetSourceSize 30 sptr,sptr #comfunc global IDXGISwapChain2_SetMaximumFrameLatency 31 int #comfunc global IDXGISwapChain2_GetMaximumFrameLatency 32 sptr #comfunc global IDXGISwapChain2_GetFrameLatencyWaitableObject 33 #comfunc global IDXGISwapChain2_SetMatrixTransform 34 sptr #comfunc global IDXGISwapChain2_GetMatrixTransform 35 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。