ISwapChainPanelNative2::SetSwapChainHandle 方法 (windows.ui.xaml.media.dxinterop.h)
使用交换链的句柄设置 SwapChainPanel 的 DirectX 交换链。
语法
HRESULT SetSwapChainHandle(
[in] HANDLE swapChainHandle
);
参数
[in] swapChainHandle
交换链的共享句柄。
返回值
如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。
注解
SetSwapChain (HANDLE swapChainHandle) 允许通过引用交换链的共享句柄来呈现交换链。
这样就可以在一个进程中创建交换链,并且需要将交换链传递给另一个进程。
XAML 支持将 DXGI 交换链设置为 SwapChainPanel 元素的内容。 应用通过从 SwapChainPanel 实例查询 ISwapChainPanelNative 接口并调用 SetSwapChain (IDXGISwapChain *swapChain) 来实现此目的。
此过程适用于指向进程交换链中的指针。 但是,这不适用于 VoIP 应用,后者使用双进程模型在前台进程暂停或关闭时在后台进程上启用持续调用。 此双进程实现需要能够将共享句柄传递给交换链,而不是在后台进程上创建的指针传递到前台进程,以便在前台应用中的 XAML SwapChainPanel 中呈现。
<!-- XAML markup -->
<Page>
<SwapChainPanel x:Name=”captureStreamDisplayPanel” />
</Page>
// Definitions
ComPtr<IDXGISwapChain1> m_swapChain;
HANDLE m_swapChainHandle;
ComPtr<ID3D11Device> m_d3dDevice;
ComPtr<IDXGIAdapter> dxgiAdapter;
ComPtr<IDXGIFactory2> dxgiFactory;
ComPtr<IDXGIFactoryMedia> dxgiFactoryMedia;
ComPtr<IDXGIDevice> dxgiDevice;
DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {0};
// Get DXGI factory (assume standard boilerplate has created D3D11Device)
m_d3dDevice.As(&dxgiDevice);
dxgiDevice->GetAdapter(&dxgiAdapter);
dxgiAdapter->GetParent(__uuidof(IDXGIFactory2), &dxgiFactory);
// Create swap chain and get handle
DCompositionCreateSurfaceHandle(GENERIC_ALL, nullptr, &m_swapChainHandle);
dxgiFactory.As(&dxgiFactoryMedia);
dxgiFactoryMedia->CreateSwapChainForCompositionSurfaceHandle(
m_d3dDevice.Get(),
m_swapChainHandle,
&swapChainDesc,
nullptr,
&m_swapChain
);
// Set swap chain to display in a SwapChainPanel
ComPtr<ISwapChainPanelNative2> panelNative;
reinterpret_cast<IUnknown*>(captureStreamDisplayPanel)->QueryInterface(IID_PPV_ARGS(&panelNative)));
panelNative->SetSwapChainHandle(m_swapChainHandle);
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8.1 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2012 R2 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | windows.ui.xaml.media.dxinterop.h |
DLL | Windows.UI.Xaml.dll |