Condividi tramite


Metodo ISwapChainPanelNative2::SetSwapChainHandle (windows.ui.xaml.media.dxinterop.h)

Imposta la catena di scambio DirectX per SwapChainPanel usando un handle per la catena di scambio.

Sintassi

HRESULT SetSwapChainHandle(
  [in] HANDLE swapChainHandle
);

Parametri

[in] swapChainHandle

Handle condiviso in una catena di scambio.

Valore restituito

Se questo metodo ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

SetSwapChain(HANDLE swapChainHandle) consente il rendering di una catena di scambio facendo riferimento a un handle condiviso alla catena di scambio.
Ciò consente scenari in cui viene creata una catena di scambio in un processo e deve essere passato a un altro processo.

XAML supporta l'impostazione di una catena di scambio DXGI come contenuto di un elemento SwapChainPanel. Le app eseguono questa operazione eseguendo query per l'interfaccia ISwapChainPanelNative da un'istanza di SwapChainPanel e chiamando SetSwapChain(IDXGISwapChain *swapChain).

Questo processo funziona per i puntatori a in catene di scambio di processo. Tuttavia, questo non funziona per le app VoIP, che usano un modello a due processi per abilitare chiamate continue su un processo in background quando un processo in primo piano viene sospeso o arrestato. Questa implementazione a due processi richiede la possibilità di passare un handle condiviso a una catena di scambio, anziché un puntatore, creato nel processo in background al processo in primo piano da eseguire in un rendering XAML SwapChainPanel nell'app in primo piano.


<!-- 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); 
	

Requisiti

Requisito Valore
Client minimo supportato Windows 8.1 [app desktop | App UWP]
Server minimo supportato Windows Server 2012 R2 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione windows.ui.xaml.media.dxinterop.h
DLL Windows.UI.Xaml.dll

Vedi anche

ISwapChainPanelNative2