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


Интерфейс IHolographicQuadLayerInterop (windows.graphics.holographic.interop.h)

Интерфейс IHolographicQuadLayerInterop — это интерфейс nano-COM, используемый для создания буферов содержимого Direct3D 12 для объекта HolographicQuadLayer среда выполнения Windows. Это шаг инициализации для использования 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, queryInterface для интерфейса IHolographicQuadLayerInterop из объекта HolographicQuadLayer .

Обратите внимание, что вы можете использовать API HolographicViewConfiguration для определения доступных параметров формата буфера.

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*. Затем queryInterface для интерфейса IHolographicQuadLayerInterop из указателя IInspectable .

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