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 |