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 |