Метод ISwapChainPanelNative2::SetSwapChainHandle (windows.ui.xaml.media.dxinterop.h)
Задает цепочку буферов DirectX для SwapChainPanel с помощью дескриптора для цепочки буферов.
Синтаксис
HRESULT SetSwapChainHandle(
[in] HANDLE swapChainHandle
);
Параметры
[in] swapChainHandle
Общий дескриптор цепочки буферов.
Возвращаемое значение
Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .
Комментарии
SetSwapChain(HANDLE swapChainHandle) позволяет отображать цепочку буферов, ссылаясь на общий дескриптор в цепочку буферов.
Это позволяет использовать сценарии, в которых цепочка буферов создается в одном процессе и должна быть передана другому процессу.
XAML поддерживает настройку цепочки буферов DXGI в качестве содержимого элемента SwapChainPanel. Приложения выполняют это, запрашивая интерфейс ISwapChainPanelNative из экземпляра SwapChainPanel и вызывая Метод SetSwapChain(IDXGISwapChain *swapChain).
Этот процесс работает для указателей на в цепочках буферов процессов. Однако это не работает для приложений VoIP, которые используют двухпроцессную модель для включения непрерывных вызовов в фоновом процессе при приостановке или завершении процесса переднего плана. Для реализации двух процессов требуется возможность передачи общего дескриптора в цепочку буферов, а не указателя, созданного в фоновом процессе на процесс переднего плана, который будет отображаться в XAML SwapChainPanel в приложении переднего плана.
<!-- 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);
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8.1 [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2012 R2 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | windows.ui.xaml.media.dxinterop.h |
DLL | Windows.UI.Xaml.dll |