mirror of
https://github.com/servo/servo.git
synced 2025-07-28 17:50:37 +01:00
93 lines
3.3 KiB
C++
93 lines
3.3 KiB
C++
#pragma once
|
|
|
|
namespace DX {
|
|
class DeviceResources;
|
|
|
|
// Constant buffer used to send the view-projection matrices to the shader
|
|
// pipeline.
|
|
struct ViewProjectionConstantBuffer {
|
|
DirectX::XMFLOAT4X4 viewProjection[2];
|
|
};
|
|
|
|
// Assert that the constant buffer remains 16-byte aligned (best practice).
|
|
static_assert((sizeof(ViewProjectionConstantBuffer) % (sizeof(float) * 4)) == 0,
|
|
"ViewProjection constant buffer size must be 16-byte aligned (16 "
|
|
"bytes is the length of four floats).");
|
|
|
|
// Manages DirectX device resources that are specific to a holographic camera,
|
|
// such as the back buffer, ViewProjection constant buffer, and viewport.
|
|
class CameraResources {
|
|
public:
|
|
CameraResources(winrt::Windows::Graphics::Holographic::HolographicCamera const
|
|
&holographicCamera);
|
|
|
|
void CreateResourcesForBackBuffer(
|
|
DX::DeviceResources *pDeviceResources,
|
|
winrt::Windows::Graphics::Holographic::
|
|
HolographicCameraRenderingParameters const &cameraParameters);
|
|
void ReleaseResourcesForBackBuffer(DX::DeviceResources *pDeviceResources);
|
|
|
|
void UpdateViewProjectionBuffer(
|
|
std::shared_ptr<DX::DeviceResources> deviceResources,
|
|
winrt::Windows::Graphics::Holographic::HolographicCameraPose const
|
|
&cameraPose,
|
|
winrt::Windows::Perception::Spatial::SpatialCoordinateSystem const
|
|
&coordinateSystem);
|
|
|
|
bool AttachViewProjectionBuffer(
|
|
std::shared_ptr<DX::DeviceResources> &deviceResources);
|
|
|
|
// Direct3D device resources.
|
|
ID3D11RenderTargetView *GetBackBufferRenderTargetView() const {
|
|
return m_d3dRenderTargetView.Get();
|
|
}
|
|
ID3D11DepthStencilView *GetDepthStencilView() const {
|
|
return m_d3dDepthStencilView.Get();
|
|
}
|
|
ID3D11Texture2D *GetBackBufferTexture2D() const {
|
|
return m_d3dBackBuffer.Get();
|
|
}
|
|
ID3D11Texture2D *GetDepthStencilTexture2D() const {
|
|
return m_d3dDepthStencil.Get();
|
|
}
|
|
D3D11_VIEWPORT GetViewport() const { return m_d3dViewport; }
|
|
DXGI_FORMAT GetBackBufferDXGIFormat() const { return m_dxgiFormat; }
|
|
|
|
// Render target properties.
|
|
winrt::Windows::Foundation::Size GetRenderTargetSize() const & {
|
|
return m_d3dRenderTargetSize;
|
|
}
|
|
bool IsRenderingStereoscopic() const { return m_isStereo; }
|
|
|
|
// The holographic camera these resources are for.
|
|
winrt::Windows::Graphics::Holographic::HolographicCamera const &
|
|
GetHolographicCamera() const {
|
|
return m_holographicCamera;
|
|
}
|
|
|
|
private:
|
|
// Direct3D rendering objects. Required for 3D.
|
|
Microsoft::WRL::ComPtr<ID3D11RenderTargetView> m_d3dRenderTargetView;
|
|
Microsoft::WRL::ComPtr<ID3D11DepthStencilView> m_d3dDepthStencilView;
|
|
Microsoft::WRL::ComPtr<ID3D11Texture2D> m_d3dBackBuffer;
|
|
Microsoft::WRL::ComPtr<ID3D11Texture2D> m_d3dDepthStencil;
|
|
|
|
// Device resource to store view and projection matrices.
|
|
Microsoft::WRL::ComPtr<ID3D11Buffer> m_viewProjectionConstantBuffer;
|
|
|
|
// Direct3D rendering properties.
|
|
DXGI_FORMAT m_dxgiFormat;
|
|
winrt::Windows::Foundation::Size m_d3dRenderTargetSize;
|
|
D3D11_VIEWPORT m_d3dViewport;
|
|
|
|
// Indicates whether the camera supports stereoscopic rendering.
|
|
bool m_isStereo = false;
|
|
|
|
// Indicates whether this camera has a pending frame.
|
|
bool m_framePending = false;
|
|
|
|
// Pointer to the holographic camera these resources are for.
|
|
winrt::Windows::Graphics::Holographic::HolographicCamera m_holographicCamera =
|
|
nullptr;
|
|
};
|
|
} // namespace DX
|