IHolographicQuadLayerInterop-Schnittstelle (windows.graphics.holographic.interop.h)

Die IHolographicQuadLayerInterop-Schnittstelle ist eine Nano-COM-Schnittstelle, die zum Erstellen von Direct3D 12-Inhaltspuffern für ein HolographicQuadLayer-Windows-Runtime-Objekt verwendet wird. Dies ist ein Initialisierungsschritt für die Verwendung von Direct3D 12 mit Windows Mixed Reality Quad-Ebenen. Außerdem kann Ihre Anwendung den Besitz von Inhaltspuffern für das Rendern erwerben, bevor sie mit der IHolographicQuadLayerUpdateParametersInterop-Schnittstelle committen.

Ihre Anwendung kann IHolographicQuadLayerInterop verwenden, um Direct3D 12-Inhaltspufferressourcen für holografische Quad-Ebenen zu initialisieren. Nano-COM ermöglicht die direkte Übergabe von Zeigern auf Direct3D 12-Objekte als Parameter für API-Aufrufe, anstatt ein Windows-Runtime Containerobjekt zu verwenden.

Ihre Anwendung verwaltet einen eigenen Pool von Pufferressourcen für holografische Inhalte. Es kann bei Bedarf zusätzliche Puffer erstellen, um weiterhin reibungslos gerendert zu werden. Auf den meisten Geräten sind dies drei oder vier Puffer. Ihre Anwendung sollte mit mindestens zwei Puffern im Pool beginnen. Ihre Anwendung kann dynamisch erkennen, wann sie einen neuen Puffer erstellen muss, indem sie nach fehlgeschlagenen Versuchen sucht, sofort Puffer abzurufen, die zuvor für die Präsentation committet wurden. Für jeden Frame wird weiterhin ein Inhaltspuffer mit vier Ebenen angezeigt, bis ein neuer Puffer committet wird.

Ein von einem HolographicQuadLayer-Objekt erstellter Puffer kann nur mit diesem Objekt verwendet werden. Es sollte freigegeben werden, wenn holographicQuadLayer veröffentlicht wird oder wenn das Direct3D 12-Gerät neu erstellt werden muss – je nachdem, was zuerst geschieht. Der Puffer darf sich nicht in der GPU-Pipeline befinden, wenn er freigegeben wird. Direct3D 12-Zäune sollten verwendet werden, um sicherzustellen, dass diese Bedingung erfüllt ist, bevor das Pufferobjekt freigegeben wird.

Vererbung

Die IHolographicQuadLayerInterop-Schnittstelle erbt von der IInspectable-Schnittstelle .

Methoden

Die IHolographicQuadLayerInterop-Schnittstelle verfügt über diese Methoden.

 
IHolographicQuadLayerInterop::AcquireDirect3D12BufferResource

Die IHolographicQuadLayerInterop::AcquireDirect3D12BufferResource-Funktion ruft eine Direct3D 12-Pufferressource ab.
IHolographicQuadLayerInterop::AcquireDirect3D12BufferResourceWithTimeout

Die IHolographicQuadLayerInterop::AcquireDirect3D12BufferResourceWithTimeout-Funktion ruft eine Direct3D 12-Pufferressource mit einem optionalen Timeout ab.
IHolographicQuadLayerInterop::CreateDirect3D12ContentBufferResource

Erstellt eine Direct3D 12-Ressource zur Verwendung als Inhaltspuffer für die Ebene.
IHolographicQuadLayerInterop::CreateDirect3D12HardwareProtectedContentBufferResource

Die IHolographicQuadLayerInterop::CreateDirect3D12HardwareProtectedContentBufferResource-Funktion erstellt einen Direct3D 12-Ressourceninhaltspuffer für die Kamera.
IHolographicQuadLayerInterop::UnacquireDirect3D12BufferResource

Die IHolographicQuadLayerInterop::UnacquireDirect3D12BufferResource-Funktion hebt den Abruf einer Direct3D 12-Pufferressource auf.

Hinweise

Um diese Schnittstelle in C++/WinRT zu verwenden, queryInterface für die IHolographicQuadLayerInterop-Schnittstelle aus dem HolographicQuadLayer-Objekt .

Beachten Sie, dass Sie die HolographicViewConfiguration-API verwenden können, um die verfügbaren Optionen für das Pufferformat zu ermitteln.

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

Um diese Schnittstelle in C++/CX zu verwenden, wandeln Sie das HolographicQuadLayer-Objekt in IInspectable* um. Anschließend QueryInterface für die IHolographicQuadLayerInterop-Schnittstelle aus dem IInspectable-Zeiger .

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10, Version 2004 (10.0; Build 19041)
Unterstützte Mindestversion (Server) Windows Server, Version 2004 (10.0; Build 19041)
Kopfzeile windows.graphics.holographic.interop.h