summaryrefslogtreecommitdiff
path: root/chromium/device/vr/openvr/openvr_render_loop.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/device/vr/openvr/openvr_render_loop.h')
-rw-r--r--chromium/device/vr/openvr/openvr_render_loop.h36
1 files changed, 26 insertions, 10 deletions
diff --git a/chromium/device/vr/openvr/openvr_render_loop.h b/chromium/device/vr/openvr/openvr_render_loop.h
index d62abb8ffe1..df7fdc35e1f 100644
--- a/chromium/device/vr/openvr/openvr_render_loop.h
+++ b/chromium/device/vr/openvr/openvr_render_loop.h
@@ -10,6 +10,7 @@
#include "base/time/time.h"
#include "build/build_config.h"
#include "device/vr/public/mojom/vr_service.mojom.h"
+#include "device/vr/vr_device.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/system/platform_handle.h"
#include "third_party/openvr/src/headers/openvr.h"
@@ -21,16 +22,24 @@
namespace device {
+class OpenVRWrapper;
+struct OpenVRGamepadState;
+
class OpenVRRenderLoop : public base::Thread, mojom::VRPresentationProvider {
public:
- OpenVRRenderLoop(vr::IVRSystem* vr);
+ using RequestSessionCallback =
+ base::OnceCallback<void(bool result,
+ mojom::VRSubmitFrameClientRequest,
+ mojom::VRPresentationProviderPtrInfo,
+ mojom::VRDisplayFrameTransportOptionsPtr)>;
+
+ OpenVRRenderLoop(
+ base::RepeatingCallback<void(OpenVRGamepadState)> update_gamepad);
~OpenVRRenderLoop() override;
- void RequestPresent(
- mojom::VRSubmitFrameClientPtrInfo submit_client_info,
- mojom::VRPresentationProviderRequest request,
- device::mojom::VRRequestPresentOptionsPtr present_options,
- device::mojom::VRDisplayHost::RequestPresentCallback callback);
+ void RequestSession(base::OnceCallback<void()> on_presentation_ended,
+ mojom::XRDeviceRuntimeSessionOptionsPtr options,
+ RequestSessionCallback callback);
void ExitPresent();
base::WeakPtr<OpenVRRenderLoop> GetWeakPtr();
@@ -48,13 +57,17 @@ class OpenVRRenderLoop : public base::Thread, mojom::VRPresentationProvider {
const gfx::RectF& left_bounds,
const gfx::RectF& right_bounds,
const gfx::Size& source_size) override;
- void GetVSync(GetVSyncCallback callback) override;
+ void GetFrameData(
+ VRPresentationProvider::GetFrameDataCallback callback) override;
private:
// base::Thread overrides:
void Init() override;
void CleanUp() override;
+ void ClearPendingFrame();
+ void UpdateControllerState();
+
mojom::VRPosePtr GetPose();
std::vector<mojom::XRInputSourceStatePtr> GetInputState(
vr::TrackedDevicePose_t* poses,
@@ -71,17 +84,20 @@ class OpenVRRenderLoop : public base::Thread, mojom::VRPresentationProvider {
D3D11TextureHelper texture_helper_;
#endif
+ base::OnceCallback<void()> delayed_get_frame_data_callback_;
+ bool has_outstanding_frame_ = false;
+
int16_t next_frame_id_ = 0;
bool is_presenting_ = false;
- bool report_webxr_input_ = false;
InputActiveState input_active_states_[vr::k_unMaxTrackedDeviceCount];
gfx::RectF left_bounds_;
gfx::RectF right_bounds_;
gfx::Size source_size_;
scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
- vr::IVRSystem* vr_system_;
- vr::IVRCompositor* vr_compositor_;
mojom::VRSubmitFrameClientPtr submit_client_;
+ base::RepeatingCallback<void(OpenVRGamepadState)> update_gamepad_;
+ base::OnceCallback<void()> on_presentation_ended_;
+ std::unique_ptr<OpenVRWrapper> openvr_;
mojo::Binding<mojom::VRPresentationProvider> binding_;
base::WeakPtrFactory<OpenVRRenderLoop> weak_ptr_factory_;