IHolographicQuadLayerInterop インターフェイス (windows.graphics.holographic.interop.h)
IHolographicQuadLayerInterop インターフェイスは nano-COM インターフェイスであり、HolographicQuadLayer Windows ランタイム オブジェクトのDirect3D 12 コンテンツ バッファーを作成するために使用されます。 これは、Windows Mixed Realityクワッド レイヤーでDirect3D 12を使用するための初期化手順です。 また、 IHolographicQuadLayerUpdateParametersInterop インターフェイスを使用してコンテンツ バッファーをコミットする前に、アプリケーションでレンダリング用のコンテンツ バッファーの所有権を取得することもできます。
アプリケーションでは、IHolographicQuadLayerInterop を使用して、ホログラフィック クワッド レイヤーのコンテンツ バッファー リソースDirect3D 12初期化できます。 Nano-COM を使用すると、Windows ランタイムコンテナー オブジェクトを使用する代わりに、Direct3D 12 オブジェクトへのポインターを API 呼び出しのパラメーターとして直接渡すことができます。
アプリケーションは、ホログラフィック コンテンツ バッファー リソースの独自のプールを管理します。 レンダリングをスムーズに続行するために、必要に応じて追加のバッファーを作成できます。 ほとんどのデバイスでは、これは 3 つまたは 4 つのバッファーになります。 アプリケーションは、プール内の少なくとも 2 つのバッファーから開始する必要があります。 アプリケーションでは、プレゼンテーション用に以前にコミットされたバッファーをすぐに取得しようとして失敗した試行を探すことで、新しいバッファーを作成する必要があるタイミングを動的に検出できます。 新しいバッファーがコミットされるまで、四角形レイヤーコンテンツ バッファーは各フレームに引き続き表示されます。
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) |
Header | windows.graphics.holographic.interop.h |