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

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

应用程序可以使用 IHolographicQuadLayerInterop 为全息象限层初始化 Direct3D 12 内容缓冲区资源。 Nano-COM 允许直接将指向 Direct3D 12 对象的指针作为 API 调用的参数传递,而不是使用Windows 运行时容器对象。

应用程序管理自己的全息内容缓冲区资源池。 它可以根据需要创建其他缓冲区,以便继续顺利呈现。 在大多数设备上,这是三个或四个缓冲区。 应用程序应从池中的至少两个缓冲区开始。 应用程序可以通过查找失败的尝试来动态检测何时需要创建新缓冲区,以立即获取以前提交用于演示的缓冲区。 在提交新缓冲区之前,将继续在每个帧中呈现一个象限层内容缓冲区。

HolographicQuadLayer 对象创建的缓冲区只能与该对象一起使用。 当 释放 HolographicQuadLayer 或需要重新创建 Direct3D 12 设备时(以先发生者为准)时,应释放它。 释放缓冲区时,缓冲区不得位于 GPU 管道中 - 应使用 Direct3D 12 围栏来确保在释放缓冲区对象之前满足此条件。

继承

IHolographicQuadLayerInterop 接口继承自 IInspectable 接口。

方法

IHolographicQuadLayerInterop 接口具有以下方法。

 
IHolographicQuadLayerInterop::AcquireDirect3D12BufferResource

IHolographicQuadLayerInterop::AcquireDirect3D12BufferResource 函数获取 Direct3D 12 缓冲区资源。
IHolographicQuadLayerInterop::AcquireDirect3D12BufferResourceWithTimeout

IHolographicQuadLayerInterop::AcquireDirect3D12BufferResourceWithTimeout 函数获取具有可选超时值的 Direct3D 12 缓冲区资源。
IHolographicQuadLayerInterop::CreateDirect3D12ContentBufferResource

创建要用作层的内容缓冲区的 Direct3D 12 资源。
IHolographicQuadLayerInterop::CreateDirect3D12HardwareProtectedContentBufferResource

IHolographicQuadLayerInterop::CreateDirect3D12HardwareProtectedContentBufferResource 函数为相机创建 Direct3D 12 资源内容缓冲区。
IHolographicQuadLayerInterop::UnacquireDirect3D12BufferResource

IHolographicQuadLayerInterop::UnacquireDirect3D12BufferResource 函数取消获取 Direct3D 12 缓冲区资源。

注解

若要在 C++/WinRT 中使用此接口,请从 HolographicQuadLayer 对象获取 IHolographicQuadLayerInterop 接口 的 QueryInterface

请注意,可以使用 HolographicViewConfiguration API 来确定缓冲区格式的可用选项。

m_quadLayer = HolographicQuadLayer{ {1024, 1024} };
winrt::com_ptr<IHolographicQuadLayerInterop> quadLayerInterop{
    m_quadLayer.as<IHolographicQuadLayerInterop>() };

// Create/acquire buffer.
if (!m_D3D12ContentBuffer[m_contentBufferIndex])
{
    D3D12_RESOURCE_DESC bufferDesc{ sourceDesc };
    bufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    bufferDesc.SampleDesc.Count = 1;
    bufferDesc.SampleDesc.Quality = 0;
    bufferDesc.MipLevels = 1;

    winrt::check_hresult(
        quadLayerInterop->CreateDirect3D12ContentBufferResource(
            m_deviceResources->GetD3D12Device(),
            &bufferDesc,
            &m_D3D12ContentBuffer[m_contentBufferIndex]));
}

若要在 C++/CX 中使用此接口,请将 HolographicQuadLayer 对象强制转换为 IInspectable*。 然后,从 IInspectable 指针获取 IHolographicQuadLayerInterop 接口的 QueryInterface。

m_quadLayer = ref new HolographicQuadLayer();
Microsoft::WRL::ComPtr<IHolographicQuadLayerInterop> quadLayerInterop;
{
    Microsoft::WRL::ComPtr<IInspectable> iInspectable = reinterpret_cast<IInspectable*>(m_quadLayer);
    DX::ThrowIfFailed(iInspectable.As(&quadLayerInterop));
}

// Create/acquire buffer.
if (!m_D3D12ContentBuffer[m_contentBufferIndex])
{
    D3D12_RESOURCE_DESC bufferDesc = sourceDesc;
    bufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    bufferDesc.SampleDesc.Count = 1;
    bufferDesc.SampleDesc.Quality = 0;
    bufferDesc.MipLevels = 1;

    DX::ThrowIfFailed(quadLayerInterop->CreateDirect3D12ContentBufferResource(
        m_deviceResources->GetD3D12Device(),
        &bufferDesc,
        &m_D3D12ContentBuffer[m_contentBufferIndex]));
}

要求

要求
最低受支持的客户端 Windows 10,版本 2004 (10.0;内部版本 19041)
最低受支持的服务器 Windows Server 版本 2004 (10.0;内部版本 19041)
标头 windows.graphics.holographic.interop.h