HolographicCameraRenderingParameters.CommitDirect3D11DepthBuffer Methode

Definition

Stellt einen Tiefenpuffer für diesen Frame für die Holgrafikanzeigepipeline bereit, wodurch die tiefenbasierte Stabilisierung des Frames relativ zur Kopfbewegung des Benutzers ermöglicht wird.

public:
 virtual void CommitDirect3D11DepthBuffer(IDirect3DSurface ^ value) = CommitDirect3D11DepthBuffer;
void CommitDirect3D11DepthBuffer(IDirect3DSurface const& value);
public void CommitDirect3D11DepthBuffer(IDirect3DSurface value);
function commitDirect3D11DepthBuffer(value)
Public Sub CommitDirect3D11DepthBuffer (value As IDirect3DSurface)

Parameter

value
IDirect3DSurface

Die Direct3D 11-Oberfläche, die den Tiefenpuffer der App enthält.

Windows-Anforderungen

Gerätefamilie
Windows 10 Creators Update (eingeführt in 10.0.15063.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v4.0)

Hinweise

Wenn eine App einen Tiefenpuffer für einen Frame bereitstellt und dann setFocusPoint aufruft, werden der Fokuspunkt und die Normalität basierend auf dem Tiefenpuffer verzögert. Ihre App erreicht in der Regel eine optimale visuelle Qualität, indem Sie einen genauen Tiefenpuffer festlegen, dessen Pixel mithilfe Ihrer angegebenen Nahe- und Weitebenen wieder auf Meter zugeordnet werden können und dann nicht SetFocusPoint aufrufen.

Diese Methode verwendet das Direct3D-Gerät, das Sie dem HolographicSpace bereitgestellt haben. Wenn Sie das D3D11_CREATE_DEVICE_SINGLETHREADED-Flag auf Ihrem Gerät angegeben haben, müssen Sie diese Methode von Ihrem einzelnen Direct3D-Thread aufrufen, um das nicht definierte Verhalten zu vermeiden.

Im folgenden Codebeispiel wird gezeigt, wie eine Tiefenpufferressource aus einer nativen ID3D11Texture2D in eine WinRT IDirect3DSurface-Schnittstelle konvertiert werden kann, die in CommitDirect3D11DepthBuffer übergeben werden kann. Die ID3D11Texture2D muss mit dem D3D11_BIND_SHADER_RESOURCE erstellt werden, der vom System gelesen werden soll.

inline winrt::Windows::Graphics::DirectX::Direct3D11::IDirect3DSurface CreateDepthTextureInteropObject(
        const Microsoft::WRL::ComPtr<ID3D11Texture2D> spTexture2D)
{
    // Direct3D interop APIs are used to provide the buffer to the WinRT API.
    Microsoft::WRL::ComPtr<IDXGIResource1> depthStencilResource;
    winrt::check_hresult(spTexture2D.As(&depthStencilResource));
    Microsoft::WRL::ComPtr<IDXGISurface2> depthDxgiSurface;
    winrt::check_hresult(depthStencilResource->CreateSubresourceSurface(0, &depthDxgiSurface));
    winrt::com_ptr<::IInspectable> inspectableSurface;
    winrt::check_hresult(
        CreateDirect3D11SurfaceFromDXGISurface(
            depthDxgiSurface.Get(),
            reinterpret_cast<IInspectable**>(winrt::put_abi(inspectableSurface))
        ));

    return inspectableSurface.as<winrt::Windows::Graphics::DirectX::Direct3D11::IDirect3DSurface>();
}

Die in diesem Beispiel gezeigte CreateDepthTextureInteropObject-Methode ist in den Windows Mixed Reality App-Vorlagen enthalten.

Gilt für: