Partager via


Méthode ISwapChainPanelNative2 ::SetSwapChainHandle (windows.ui.xaml.media.dxinterop.h)

Définit la chaîne d’échange DirectX pour SwapChainPanel à l’aide d’un handle pour la chaîne d’échange.

Syntaxe

HRESULT SetSwapChainHandle(
  [in] HANDLE swapChainHandle
);

Paramètres

[in] swapChainHandle

Un handle partagé vers une chaîne d’échange.

Valeur retournée

Si cette méthode réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

SetSwapChain(HANDLE swapChainHandle) permet de rendre une chaîne d’échange en référençant un handle partagé à la chaîne d’échange.
Cela permet les scénarios où une chaîne d’échange est créée dans un processus et doit être passée à un autre processus.

XAML prend en charge la définition d’une chaîne d’échange DXGI comme contenu d’un élément SwapChainPanel. Les applications effectuent cette opération en interrogeant l’interface ISwapChainPanelNative à partir d’un instance SwapChainPanel et en appelant SetSwapChain(IDXGISwapChain *swapChain).

Ce processus fonctionne pour les pointeurs vers dans les chaînes d’échange de processus. Toutefois, cela ne fonctionne pas pour les applications VoIP, qui utilisent un modèle à deux processus pour activer la poursuite des appels sur un processus en arrière-plan lorsqu’un processus de premier plan est suspendu ou arrêté. Cette implémentation à deux processus nécessite la possibilité de passer un handle partagé à une chaîne d’échange, plutôt qu’un pointeur, créé sur le processus en arrière-plan vers le processus de premier plan à afficher dans un SwapChainPanel XAML dans l’application de premier plan.


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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8.1 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 R2 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête windows.ui.xaml.media.dxinterop.h
DLL Windows.UI.Xaml.dll

Voir aussi

ISwapChainPanelNative2