Поделиться через


Метод 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

См. также раздел

ISwapChainPanelNative2