Интерфейс IHolographicCameraInterop (windows.graphics.holographic.interop.h)
Интерфейс IHolographicCameraInterop — это интерфейс nano-COM, используемый для создания ресурсов обратного буфера Direct3D 12 для объекта HolographicCamera среда выполнения Windows. Это шаг инициализации для использования Direct3D 12 с Windows Mixed Reality. Этот интерфейс также позволяет приложению получить права владения буферами содержимого для отрисовки, прежде чем фиксировать их с помощью интерфейса HolographicCameraRenderingParametersInterop .
Приложение может использовать этот интерфейс для инициализации голографической отрисовки с помощью Direct3D 12. Nano-COM позволяет передавать указатели на объекты Direct3D 12 напрямую в качестве параметров для вызовов API, а не использовать объект контейнера среда выполнения Windows.
Приложение управляет собственным пулом ресурсов голографического буфера для использования в качестве целевых объектов отрисовки (задних буферов) для каждой камеры HolographicCamera. Он может создавать дополнительные буферы по мере необходимости, чтобы продолжить бесперебойную отрисовку. На большинстве устройств это будет три или четыре поверхности. Приложение должно начинаться по крайней мере с двух буферов в пуле. Приложение может динамически определять, когда ему нужно создать новый буфер, искать неудачные попытки немедленного получения буферов, которые ранее были зафиксированы для представления. Приложение должно зафиксировать буфер для HolographicCamera , который включен в HolographicFrame , если только основной слой не отключен для этой камеры. В этом случае приложение не должно фиксировать буфер для этой камеры.
Буфер, созданный объектом HolographicCamera , можно использовать только с этим объектом. Он должен быть освобожден при выпуске HolographicCamera или при необходимости повторного создания устройства Direct3D 12 в зависимости от того, что произойдет раньше. Буфер не должен находиться в конвейере GPU при освобождении— необходимо использовать ограждения Direct3D 12, чтобы обеспечить соблюдение этого условия перед освобождением объекта буфера.
Наследование
Интерфейс IHolographicCameraInterop наследуется от интерфейса IInspectable .
Методы
Интерфейс IHolographicCameraInterop содержит следующие методы.
IHolographicCameraInterop::AcquireDirect3D12BufferResource Функция IHolographicCameraInterop::AcquireDirect3D12BufferResource получает ресурс буфера Direct3D 12. |
IHolographicCameraInterop::AcquireDirect3D12BufferResourceWithTimeout Функция IHolographicCameraInterop::AcquireDirect3D12BufferResourceWithTimeout получает ресурс буфера Direct3D 12 с необязательным временем ожидания. |
IHolographicCameraInterop::CreateDirect3D12BackBufferResource Создает ресурс Direct3D 12 для использования в качестве буфера содержимого для камеры. |
IHolographicCameraInterop::CreateDirect3D12HardwareProtectedBackBufferResource IHolographicCameraInterop::CreateDirect3D12HardwareProtectedBackBufferResource создает ресурс Direct3D 12 для использования в качестве буфера содержимого для камеры. |
IHolographicCameraInterop::UnacquireDirect3D12BufferResource Функция IHolographicCameraInterop::UnacquireDirect3D12BufferResource не получает ресурс буфера Direct3D 12. |
Комментарии
Чтобы использовать этот интерфейс в C++/WinRT, queryInterface для интерфейса IHolographicCameraInterop из объекта HolographicCamera .
winrt::com_ptr<IHolographicCameraInterop> spCameraInterop {
m_holographicCamera.as<IHolographicCameraInterop>() };
D3D12_RESOURCE_DESC bufferDesc { };
bufferDesc.Format =
SelectFormatUsingHolographicViewConfiguration(
m_holographicCamera.ViewConfiguration());
bufferDesc.SampleDesc.Count = 1;
bufferDesc.SampleDesc.Quality = 0;
bufferDesc.MipLevels = 1;
bufferDesc.Width = static_cast<UINT64>(
m_holographicCamera.ViewConfiguration().RenderTargetSize().Width);
bufferDesc.Height = static_cast<UINT64>(
m_holographicCamera.ViewConfiguration().RenderTargetSize().Height);
winrt::check_hresult(
spCameraInterop->CreateDirect3D12BackBufferResource(
m_deviceResources->GetD3D12Device(),
&bufferDesc,
&m_D3D12BackBuffer[m_contentBufferIndex]));
Api HolographicViewConfiguration можно использовать для определения доступных параметров формата буфера и получения сведений о целевом размере отрисовки для соответствующих выходных данных, например HolographicDisplay. Если приложению необходимо изменить размер буфера для буферов Direct3D 12 с размера целевого объекта отрисовки по умолчанию для HolographicCamera, ему следует либо запросить новый размер целевого объекта отрисовки с помощью метода HolographicViewConfiguration::RequestRenderTargetSize и создать буферы с использованием размера, возвращаемого этим методом, либо выбрать произвольный размер и переопределить окно просмотра, как описано в следующем абзаце.
Приложение Direct3D 12 может использовать размер окна просмотра, выбранный независимо от приложения. В этом случае необходимо вызывать метод HolographicCameraPose.OverrideViewport для каждого кадра, чтобы сообщить платформе о окне просмотра, используемом для отрисовки.
Ниже приведен фрагмент кода из шаблона приложения Windows Mixed Reality Direct3D 12, который включает стандартный код для большинства API, которые предоставляются в заголовке Windows.Graphics.Holographic.Interop.h
.
winrt::com_ptr<IHolographicCameraInterop> spCameraInterop =
m_holographicCamera.as<IHolographicCameraInterop>();
winrt::check_hresult(
spCameraInterop->CreateDirect3D12BackBufferResource(
spD3D12Device.get(),
&bufferDesc,
m_spD3D12BackBuffer[bufferSlot].put()));
Требования
Минимальная версия клиента | Windows 10 версии 2004 (10.0; Сборка 19041) |
Минимальная версия сервера | Windows Server версии 2004 (10.0; Сборка 19041) |
Верхняя часть | windows.graphics.holographic.interop.h |