Compartilhar via


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

Confira também

ISwapChainPanelNative2