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 5 #ifndef DEVICE_VR_OPENXR_OPENXR_RENDER_LOOP_H_ 6 #define DEVICE_VR_OPENXR_OPENXR_RENDER_LOOP_H_ 7 8 #include <stdint.h> 9 #include <memory> 10 11 #include "base/callback.h" 12 #include "base/macros.h" 13 #include "device/vr/openxr/openxr_util.h" 14 #include "device/vr/windows/compositor_base.h" 15 #include "third_party/openxr/src/include/openxr/openxr.h" 16 17 struct XrView; 18 19 namespace device { 20 21 class OpenXrApiWrapper; 22 class OpenXRInputHelper; 23 24 class OpenXrRenderLoop : public XRCompositorCommon { 25 public: 26 OpenXrRenderLoop(base::RepeatingCallback<void(mojom::VRDisplayInfoPtr)> 27 on_display_info_changed, 28 XrInstance instance, 29 const OpenXrExtensionHelper& extension_helper_); 30 ~OpenXrRenderLoop() override; 31 32 private: 33 // XRCompositorCommon: 34 void ClearPendingFrameInternal() override; 35 36 // XRDeviceAbstraction: 37 mojom::XRFrameDataPtr GetNextFrameData() override; 38 bool StartRuntime() override; 39 void StopRuntime() override; 40 void OnSessionStart() override; 41 bool PreComposite() override; 42 bool HasSessionEnded() override; 43 bool SubmitCompositedFrame() override; 44 device::mojom::XREnvironmentBlendMode GetEnvironmentBlendMode( 45 device::mojom::XRSessionMode session_mode) override; 46 device::mojom::XRInteractionMode GetInteractionMode( 47 device::mojom::XRSessionMode session_mode) override; 48 bool CanEnableAntiAliasing() const override; 49 50 void InitializeDisplayInfo(); 51 bool UpdateEyeParameters(); 52 bool UpdateEye(const XrView& view_head, 53 const gfx::Size& view_size, 54 mojom::VREyeParametersPtr* eye) const; 55 void UpdateStageParameters(); 56 57 // Owned by OpenXrStatics 58 XrInstance instance_; 59 const OpenXrExtensionHelper& extension_helper_; 60 61 std::unique_ptr<OpenXrApiWrapper> openxr_; 62 std::unique_ptr<OpenXRInputHelper> input_helper_; 63 64 base::RepeatingCallback<void(mojom::VRDisplayInfoPtr)> 65 on_display_info_changed_; 66 mojom::VRDisplayInfoPtr current_display_info_; 67 68 // This must be the last member 69 base::WeakPtrFactory<OpenXrRenderLoop> weak_ptr_factory_{this}; 70 71 DISALLOW_COPY_AND_ASSIGN(OpenXrRenderLoop); 72 }; 73 74 } // namespace device 75 76 #endif // DEVICE_VR_OPENXR_OPENXR_RENDER_LOOP_H_ 77