ISwapChainPanelNative
COM公式ドキュメント
ISwapChainPanelNative インターフェイス (windows.ui.xaml.media.dxinterop.h) は、XAML と DirectX のスワップチェーンとの間の相互運用を提供します。
解説(Remarks)
このインターフェイスは、Windows::UI::XAML::Control::SwapChainPanel Windows ランタイム型のネイティブ実装を提供します。ISwapChainPanelNative へのポインターを取得するには、SwapChainPanel インスタンスを IInspectable または IUnknown にキャストし、QueryInterface を呼び出す必要があります。
Microsoft::WRL::ComPtr<ISwapChainPanelNative> m_swapChainNative;
// ...
IInspectable* panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainPanel);
panelInspectable->QueryInterface(__uuidof(ISwapChainPanelNative), (void **)&m_swapChainNative);
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SwapChainPanel の DirectX スワップチェーンを設定します。
| swapChain | IDXGISwapChain* | in | 構成済みの IDXGISwapChain。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、親である SwapChainPanel が属する UI スレッド上で呼び出す必要があります。別のスレッドで呼び出した場合は 0x8001010E (RPC_E_WRONG_THREAD、「アプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました」) を返します。
呼び出されると、このメソッドは入力として渡された IDXGISwapChain の参照カウントをインクリメントします。これに伴い、使用中の対象グラフィックスデバイス (たとえば ID3D12Device) の参照カウントもインクリメントされます。パネルが不要になった時点でこれらの参照を直ちに解放できるようにするには、SetSwapChain を再度呼び出して null ポインターを渡すことができます。これにより、SwapChainPanel インスタンスによって追加された、入力の IDXGISwapChain を起点とするオブジェクトグラフへの追加参照がすべて削除されます。これは、たとえばデバイスロスト (device lost) のシナリオから回復する場合など、使用中のデバイスを適切に解放できるようにするうえで特に重要です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISwapChainPanelNative "{F92F19D2-3ADE-45A6-A20C-F6F1EA90554B}"
#usecom global ISwapChainPanelNative IID_ISwapChainPanelNative "{}"
#comfunc global ISwapChainPanelNative_SetSwapChain 3 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。