1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 #ifndef DEVICE_VR_WINDOWS_MIXED_REALITY_WRAPPERS_WMR_RENDERING_H_ 5 #define DEVICE_VR_WINDOWS_MIXED_REALITY_WRAPPERS_WMR_RENDERING_H_ 6 7 #include <d3d11.h> 8 #include <windows.graphics.holographic.h> 9 #include <wrl.h> 10 11 #include <memory> 12 #include <vector> 13 14 #include "base/macros.h" 15 16 namespace device { 17 class WMRCoordinateSystem; 18 19 class WMRCamera { 20 public: 21 virtual ~WMRCamera() = default; 22 23 virtual ABI::Windows::Foundation::Size RenderTargetSize() = 0; 24 virtual bool IsStereo() = 0; 25 }; 26 27 class WMRCameraImpl : public WMRCamera { 28 public: 29 explicit WMRCameraImpl( 30 Microsoft::WRL::ComPtr< 31 ABI::Windows::Graphics::Holographic::IHolographicCamera> camera); 32 ~WMRCameraImpl() override; 33 34 ABI::Windows::Foundation::Size RenderTargetSize() override; 35 bool IsStereo() override; 36 37 private: 38 Microsoft::WRL::ComPtr< 39 ABI::Windows::Graphics::Holographic::IHolographicCamera> 40 camera_; 41 42 DISALLOW_COPY_AND_ASSIGN(WMRCameraImpl); 43 }; 44 45 class WMRCameraPose { 46 public: 47 virtual ~WMRCameraPose() = default; 48 49 virtual ABI::Windows::Foundation::Rect Viewport() = 0; 50 virtual std::unique_ptr<WMRCamera> HolographicCamera() = 0; 51 virtual ABI::Windows::Graphics::Holographic::HolographicStereoTransform 52 ProjectionTransform() = 0; 53 virtual bool TryGetViewTransform( 54 const WMRCoordinateSystem* origin, 55 ABI::Windows::Graphics::Holographic::HolographicStereoTransform* 56 transform) = 0; 57 virtual ABI::Windows::Graphics::Holographic::IHolographicCameraPose* 58 GetRawPtr() const; 59 }; 60 61 class WMRCameraPoseImpl : public WMRCameraPose { 62 public: 63 explicit WMRCameraPoseImpl( 64 Microsoft::WRL::ComPtr< 65 ABI::Windows::Graphics::Holographic::IHolographicCameraPose> pose); 66 ~WMRCameraPoseImpl() override; 67 68 ABI::Windows::Foundation::Rect Viewport() override; 69 std::unique_ptr<WMRCamera> HolographicCamera() override; 70 ABI::Windows::Graphics::Holographic::HolographicStereoTransform 71 ProjectionTransform() override; 72 bool TryGetViewTransform( 73 const WMRCoordinateSystem* origin, 74 ABI::Windows::Graphics::Holographic::HolographicStereoTransform* 75 transform) override; 76 ABI::Windows::Graphics::Holographic::IHolographicCameraPose* GetRawPtr() 77 const override; 78 79 private: 80 Microsoft::WRL::ComPtr< 81 ABI::Windows::Graphics::Holographic::IHolographicCameraPose> 82 pose_; 83 84 DISALLOW_COPY_AND_ASSIGN(WMRCameraPoseImpl); 85 }; 86 87 class WMRRenderingParameters { 88 public: 89 virtual ~WMRRenderingParameters() = default; 90 91 virtual Microsoft::WRL::ComPtr<ID3D11Texture2D> 92 TryGetBackbufferAsTexture2D() = 0; 93 }; 94 95 class WMRRenderingParametersImpl : public WMRRenderingParameters { 96 public: 97 explicit WMRRenderingParametersImpl( 98 Microsoft::WRL::ComPtr<ABI::Windows::Graphics::Holographic:: 99 IHolographicCameraRenderingParameters> 100 rendering_params); 101 ~WMRRenderingParametersImpl() override; 102 103 Microsoft::WRL::ComPtr<ID3D11Texture2D> TryGetBackbufferAsTexture2D() 104 override; 105 106 private: 107 Microsoft::WRL::ComPtr<ABI::Windows::Graphics::Holographic:: 108 IHolographicCameraRenderingParameters> 109 rendering_params_; 110 111 DISALLOW_COPY_AND_ASSIGN(WMRRenderingParametersImpl); 112 }; 113 114 } // namespace device 115 #endif // DEVICE_VR_WINDOWS_MIXED_REALITY_WRAPPERS_WMR_RENDERING_H_ 116