iHolographicCameraInterop 接口 (windows.graphics.holographic.interop.h)

IHolographicCameraInterop 接口是一个 nano-COM 接口,用于为 HolographicCamera Windows 运行时 对象创建 Direct3D 12 后台缓冲区资源。 这是将 Direct3D 12 与 Windows Mixed Reality 配合使用的初始化步骤。 此接口还允许应用程序在使用 HolographicCameraRenderingParametersInterop 接口提交内容缓冲区之前获取用于呈现的内容缓冲区的所有权。

应用程序可以使用此接口通过 Direct3D 12 初始化全息渲染。 Nano-COM 允许直接将指向 Direct3D 12 对象的指针作为 API 调用的参数传递,而不是使用Windows 运行时容器对象。

应用程序管理自己的全息缓冲区资源池,用作每个 HolographicCamera (后台缓冲区) 的呈现目标。 它可以根据需要创建其他缓冲区,以便继续顺利呈现。 在大多数设备上,这是三个或四个图面。 应用程序应从池中的至少两个缓冲区开始。 应用程序可以动态检测何时需要创建新缓冲区,方法是查找不成功的尝试,立即获取以前提交用于演示的缓冲区。 应用程序必须为全息帧中包含的 HolographicCamera 提交缓冲区,除非为该相机禁用了主层,在这种情况下,应用程序不得为该相机提交缓冲区。

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 中使用此接口,请通过 HolographicCamera 对象为 IHolographicCameraInterop 接口的 QueryInterface

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]));

可以使用 HolographicViewConfiguration API 来确定缓冲区格式的可用选项,并获取有关相应输出(例如 HolographicDisplay)的呈现目标大小的信息。 如果应用程序需要从 HolographicCamera 的默认呈现目标大小更改 Direct3D 12 缓冲区的缓冲区大小,则它应使用 HolographicViewConfiguration::RequestRenderTargetSize 方法请求新的呈现目标大小,并使用该方法返回的大小创建缓冲区,或者选择任意大小并重写视区,如以下段落中所述。

Direct3D 12 应用程序可以使用应用程序独立选择的视区大小。 在这种情况下,必须调用每个帧的 HolographicCameraPose.OverrideViewport 方法,以通知平台用于呈现的视区。

以下代码摘录来自 Windows Mixed Reality Direct3D 12 应用模板,其中包含标头中Windows.Graphics.Holographic.Interop.h提供的大多数 API 的样本代码。

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