Freigeben über


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

Legt die DirectX-Swapkette für SwapChainPanel mithilfe eines Handles auf die Swapchain-Kette fest.

Syntax

HRESULT SetSwapChainHandle(
  [in] HANDLE swapChainHandle
);

Parameter

[in] swapChainHandle

Ein freigegebenes Handle für eine Swapchain.

Rückgabewert

Wenn diese Methode erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.

Hinweise

SetSwapChain(HANDLE swapChainHandle) ermöglicht das Rendern einer Swap chain, indem auf ein freigegebenes Handle auf die Swapchain verwiesen wird.
Dies ermöglicht Szenarien, in denen eine Swapchain in einem Prozess erstellt wird und an einen anderen Prozess übergeben werden muss.

XAML unterstützt das Festlegen einer DXGI-Swap chain als Inhalt eines SwapChainPanel-Elements. Apps erreichen dies, indem sie die ISwapChainPanelNative-Schnittstelle von einem SwapChainPanel-instance abfragen und SetSwapChain(IDXGISwapChain *swapChain)aufrufen.

Dieser Prozess funktioniert für Zeiger auf in Prozess-Swapketten. Dies funktioniert jedoch nicht für VoIP-Apps, die ein Zwei-Prozess-Modell verwenden, um fortgesetzte Aufrufe eines Hintergrundprozesses zu ermöglichen, wenn ein Vordergrundprozess angehalten oder heruntergefahren wird. Diese Zwei-Prozess-Implementierung erfordert die Möglichkeit, ein freigegebenes Handle an eine Swapchain-Kette zu übergeben und nicht einen Zeiger, der im Hintergrundprozess auf den Vordergrundprozess erstellt wurde, um in einem XAML-SwapChainPanel in der Vordergrund-App gerendert zu werden.


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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8.1 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 R2 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile windows.ui.xaml.media.dxinterop.h
DLL Windows.UI.Xaml.dll

Weitere Informationen

ISwapChainPanelNative2