Método ISwapChainPanelNative2::SetSwapChainHandle (windows.ui.xaml.media.dxinterop.h)
Define a cadeia de troca DirectX para SwapChainPanel usando um identificador para a cadeia de troca.
Sintaxe
HRESULT SetSwapChainHandle(
[in] HANDLE swapChainHandle
);
Parâmetros
[in] swapChainHandle
Um identificador compartilhado para uma cadeia de troca.
Retornar valor
Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.
Comentários
SetSwapChain(HANDLE swapChainHandle) permite que uma cadeia de troca seja renderizada fazendo referência a um identificador compartilhado para a cadeia de troca.
Isso permite cenários em que uma cadeia de troca é criada em um processo e precisa ser passada para outro processo.
O XAML dá suporte à definição de uma cadeia de troca DXGI como o conteúdo de um elemento SwapChainPanel. Os aplicativos fazem isso consultando a interface ISwapChainPanelNative de uma instância swapChainPanel e chamando SetSwapChain(IDXGISwapChain *swapChain).
Esse processo funciona para ponteiros para em cadeias de troca de processos. No entanto, isso não funciona para aplicativos VoIP, que usam um modelo de dois processos para habilitar chamadas contínuas em um processo em segundo plano quando um processo em primeiro plano é suspenso ou desligado. Essa implementação de dois processos requer a capacidade de passar um identificador compartilhado para uma cadeia de troca, em vez de um ponteiro, criado no processo em segundo plano para o processo em primeiro plano a ser renderizado em um SwapChainPanel XAML no aplicativo em primeiro 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 | Valor |
---|---|
Cliente mínimo com suporte | Windows 8.1 [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2012 R2 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | windows.ui.xaml.media.dxinterop.h |
DLL | Windows.UI.Xaml.dll |