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 |