IHolographicCameraInterop インターフェイス (windows.graphics.holographic.interop.h)

IHolographicCameraInterop インターフェイスは nano-COM インターフェイスであり、HolographicCamera Windows ランタイム オブジェクトのDirect3D 12バック バッファー リソースを作成するために使用されます。 これは、Windows Mixed RealityでDirect3D 12を使用するための初期化手順です。 このインターフェイスを使用すると、 HolographicCameraRenderingParametersInterop インターフェイスを使用してコンテンツ バッファーをコミットする前に、アプリケーションでレンダリング用のコンテンツ バッファーの所有権を取得することもできます。

アプリケーションでは、このインターフェイスを使用して、Direct3D 12を使用してホログラフィック レンダリングを初期化できます。 Nano-COM を使用すると、Windows ランタイムコンテナー オブジェクトを使用する代わりに、Direct3D 12 オブジェクトへのポインターを API 呼び出しのパラメーターとして直接渡すことができます。

アプリケーションは、各 HolographicCamera のレンダー ターゲット (バック バッファー) として使用するために、ホログラフィック バッファー リソースの独自のプールを管理します。 レンダリングをスムーズに続行するために、必要に応じて追加のバッファーを作成できます。 ほとんどのデバイスでは、これは 3 つまたは 4 つのサーフェスになります。 アプリケーションは、プール内の少なくとも 2 つのバッファーから開始する必要があります。 アプリケーションは、プレゼンテーション用に以前にコミットされたバッファーをすぐに取得しようとして失敗した試行を探すことによって、新しいバッファーを作成する必要があるときに動的に検出できます。 アプリケーションでは、そのカメラでプライマリ レイヤーが無効になっていない限り、HolographicFrame に含まれる 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.Graphics.Holographic.Interop.hされるほとんどの API の定型コードを含む、Windows Mixed Reality Direct3D 12 アプリ テンプレートからの抜粋です。

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)
Header windows.graphics.holographic.interop.h