Método ISwapChainPanelNative2::SetSwapChainHandle (windows.ui.xaml.media.dxinterop.h)
Establece la cadena de intercambio de DirectX para SwapChainPanel mediante un identificador para la cadena de intercambio.
Sintaxis
HRESULT SetSwapChainHandle(
[in] HANDLE swapChainHandle
);
Parámetros
[in] swapChainHandle
Identificador compartido de una cadena de intercambio.
Valor devuelto
Si este método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.
Comentarios
SetSwapChain(HANDLE swapChainHandle) permite representar una cadena de intercambio haciendo referencia a un identificador compartido a la cadena de intercambio.
Esto permite escenarios en los que se crea una cadena de intercambio en un proceso y se debe pasar a otro proceso.
XAML admite la configuración de una cadena de intercambio DXGI como contenido de un elemento SwapChainPanel. Las aplicaciones lo logran consultando la interfaz ISwapChainPanelNative desde una instancia swapChainPanel y llamando a SetSwapChain(IDXGISwapChain *swapChain).
Este proceso funciona para punteros a en cadenas de intercambio de procesos. Sin embargo, esto no funciona para las aplicaciones VoIP, que usan un modelo de dos procesos para habilitar las llamadas continuas en un proceso en segundo plano cuando se suspende o se cierra un proceso en primer plano. Esta implementación de dos procesos requiere la capacidad de pasar un identificador compartido a una cadena de intercambio, en lugar de un puntero, creado en el proceso en segundo plano al proceso en primer plano para representarse en un SwapChainPanel XAML en la aplicación en primer plano.
<!-- 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);
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 8.1 [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2012 R2 [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | windows.ui.xaml.media.dxinterop.h |
Archivo DLL | Windows.UI.Xaml.dll |