Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: third_party/WebKit/Source/modules/vr/VRDisplay.h

Issue 2420743003: mojo VR interface simplified (Closed)
Patch Set: Address dcheng@ comments and adding some TODOs Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef VRDisplay_h 5 #ifndef VRDisplay_h
6 #define VRDisplay_h 6 #define VRDisplay_h
7 7
8 #include "bindings/core/v8/ScriptWrappable.h" 8 #include "bindings/core/v8/ScriptWrappable.h"
9 #include "core/dom/Document.h" 9 #include "core/dom/Document.h"
10 #include "core/dom/FrameRequestCallback.h" 10 #include "core/dom/FrameRequestCallback.h"
11 #include "device/vr/vr_service.mojom-blink.h" 11 #include "device/vr/vr_service.mojom-blink.h"
12 #include "modules/vr/VRDisplayCapabilities.h" 12 #include "modules/vr/VRDisplayCapabilities.h"
13 #include "modules/vr/VRLayer.h" 13 #include "modules/vr/VRLayer.h"
14 #include "mojo/public/cpp/bindings/binding.h"
14 #include "platform/Timer.h" 15 #include "platform/Timer.h"
15 #include "platform/heap/Handle.h" 16 #include "platform/heap/Handle.h"
16 #include "public/platform/WebGraphicsContext3DProvider.h" 17 #include "public/platform/WebGraphicsContext3DProvider.h"
17 #include "wtf/Forward.h" 18 #include "wtf/Forward.h"
18 #include "wtf/text/WTFString.h" 19 #include "wtf/text/WTFString.h"
19 20
20 namespace gpu { 21 namespace gpu {
21 namespace gles2 { 22 namespace gles2 {
22 class GLES2Interface; 23 class GLES2Interface;
23 } 24 }
24 } 25 }
25 26
26 namespace blink { 27 namespace blink {
27 28
28 class NavigatorVR; 29 class NavigatorVR;
29 class ScriptedAnimationController; 30 class ScriptedAnimationController;
30 class VRController; 31 class VRController;
31 class VREyeParameters; 32 class VREyeParameters;
32 class VRFrameData; 33 class VRFrameData;
33 class VRStageParameters; 34 class VRStageParameters;
34 class VRPose; 35 class VRPose;
35 36
36 class WebGLRenderingContextBase; 37 class WebGLRenderingContextBase;
37 38
38 enum VREye { VREyeNone, VREyeLeft, VREyeRight }; 39 enum VREye { VREyeNone, VREyeLeft, VREyeRight };
39 40
40 class VRDisplay final : public GarbageCollectedFinalized<VRDisplay>, 41 class VRDisplay final : public GarbageCollectedFinalized<VRDisplay>,
42 public device::mojom::blink::VRDisplayClient,
41 public ScriptWrappable { 43 public ScriptWrappable {
42 DEFINE_WRAPPERTYPEINFO(); 44 DEFINE_WRAPPERTYPEINFO();
45 USING_PRE_FINALIZER(VRDisplay, dispose);
43 46
44 public: 47 public:
45 ~VRDisplay(); 48 ~VRDisplay();
46 49
47 unsigned displayId() const { return m_displayId; } 50 unsigned displayId() const { return m_displayId; }
48 const String& displayName() const { return m_displayName; } 51 const String& displayName() const { return m_displayName; }
49 52
50 VRDisplayCapabilities* capabilities() const { return m_capabilities; } 53 VRDisplayCapabilities* capabilities() const { return m_capabilities; }
51 VRStageParameters* stageParameters() const { return m_stageParameters; } 54 VRStageParameters* stageParameters() const { return m_stageParameters; }
52 55
53 bool isConnected() const { return m_isConnected; } 56 bool isConnected() const { return m_isConnected; }
54 bool isPresenting() const { return m_isPresenting; } 57 bool isPresenting() const { return m_isPresenting; }
55 58
56 bool getFrameData(VRFrameData*); 59 bool getFrameData(VRFrameData*);
57 VRPose* getPose(); 60 VRPose* getPose();
58 void resetPose(); 61 void resetPose();
59 62
60 double depthNear() const { return m_depthNear; } 63 double depthNear() const { return m_depthNear; }
61 double depthFar() const { return m_depthFar; } 64 double depthFar() const { return m_depthFar; }
62 65
63 void setDepthNear(double value) { m_depthNear = value; } 66 void setDepthNear(double value) { m_depthNear = value; }
64 void setDepthFar(double value) { m_depthFar = value; } 67 void setDepthFar(double value) { m_depthFar = value; }
65 68
69 void setDisplayPtr(device::mojom::blink::VRDisplayPtr display) {
70 m_display = std::move(display);
dcheng 2016/11/08 08:55:16 I think this is unused.
71 }
72
66 VREyeParameters* getEyeParameters(const String&); 73 VREyeParameters* getEyeParameters(const String&);
67 74
68 int requestAnimationFrame(FrameRequestCallback*); 75 int requestAnimationFrame(FrameRequestCallback*);
69 void cancelAnimationFrame(int id); 76 void cancelAnimationFrame(int id);
70 void serviceScriptedAnimations(double monotonicAnimationStartTime); 77 void serviceScriptedAnimations(double monotonicAnimationStartTime);
71 78
72 ScriptPromise requestPresent(ScriptState*, const HeapVector<VRLayer>& layers); 79 ScriptPromise requestPresent(ScriptState*, const HeapVector<VRLayer>& layers);
73 ScriptPromise exitPresent(ScriptState*); 80 ScriptPromise exitPresent(ScriptState*);
74 81
75 HeapVector<VRLayer> getLayers(); 82 HeapVector<VRLayer> getLayers();
76 83
77 void submitFrame(); 84 void submitFrame();
78 85
79 DECLARE_VIRTUAL_TRACE(); 86 DECLARE_VIRTUAL_TRACE();
80 87
81 protected: 88 protected:
82 friend class VRController; 89 friend class VRController;
83 90
84 VRDisplay(NavigatorVR*); 91 VRDisplay(NavigatorVR*, device::mojom::blink::VRDisplayPtr);
85 92
86 void update(const device::blink::VRDisplayPtr&); 93 void update(const device::mojom::blink::VRDisplayInfoPtr&);
87 94
88 void updatePose(); 95 void updatePose();
89 96
90 void beginPresent(ScriptPromiseResolver*); 97 void beginPresent(ScriptPromiseResolver*);
91 void forceExitPresent(); 98 void forceExitPresent();
92 99
93 void updateLayerBounds(); 100 void updateLayerBounds();
94 void disconnected(); 101 void disconnected();
95 102
96 VRController* controller(); 103 VRController* controller();
97 104
98 private: 105 private:
99 void onFullscreenCheck(TimerBase*); 106 void onFullscreenCheck(TimerBase*);
107 void onPresentComplete(ScriptPromiseResolver*, bool);
108
109 void onDisplayConnected();
110 void onDisplayDisconnected();
111
112 // VRDisplayClient
113 void OnDisplayChanged(device::mojom::blink::VRDisplayInfoPtr) override;
114 void OnExitPresent() override;
100 115
101 ScriptedAnimationController& ensureScriptedAnimationController(Document*); 116 ScriptedAnimationController& ensureScriptedAnimationController(Document*);
102 117
103 Member<NavigatorVR> m_navigatorVR; 118 Member<NavigatorVR> m_navigatorVR;
104 unsigned m_displayId; 119 unsigned m_displayId;
105 String m_displayName; 120 String m_displayName;
106 bool m_isConnected; 121 bool m_isConnected;
107 bool m_isPresenting; 122 bool m_isPresenting;
108 bool m_canUpdateFramePose; 123 bool m_canUpdateFramePose;
109 unsigned m_compositorHandle; 124 unsigned m_compositorHandle;
110 Member<VRDisplayCapabilities> m_capabilities; 125 Member<VRDisplayCapabilities> m_capabilities;
111 Member<VRStageParameters> m_stageParameters; 126 Member<VRStageParameters> m_stageParameters;
112 Member<VREyeParameters> m_eyeParametersLeft; 127 Member<VREyeParameters> m_eyeParametersLeft;
113 Member<VREyeParameters> m_eyeParametersRight; 128 Member<VREyeParameters> m_eyeParametersRight;
114 device::blink::VRPosePtr m_framePose; 129 device::mojom::blink::VRPosePtr m_framePose;
115 VRLayer m_layer; 130 VRLayer m_layer;
116 double m_depthNear; 131 double m_depthNear;
117 double m_depthFar; 132 double m_depthFar;
118 133
134 void dispose();
135
119 Timer<VRDisplay> m_fullscreenCheckTimer; 136 Timer<VRDisplay> m_fullscreenCheckTimer;
120 gpu::gles2::GLES2Interface* m_contextGL; 137 gpu::gles2::GLES2Interface* m_contextGL;
121 Member<WebGLRenderingContextBase> m_renderingContext; 138 Member<WebGLRenderingContextBase> m_renderingContext;
122 139
123 Member<ScriptedAnimationController> m_scriptedAnimationController; 140 Member<ScriptedAnimationController> m_scriptedAnimationController;
124 bool m_animationCallbackRequested; 141 bool m_animationCallbackRequested;
125 bool m_inAnimationFrame; 142 bool m_inAnimationFrame;
143
144 device::mojom::blink::VRDisplayPtr m_display;
145
146 mojo::Binding<device::mojom::blink::VRDisplayClient> m_binding;
126 }; 147 };
127 148
128 using VRDisplayVector = HeapVector<Member<VRDisplay>>; 149 using VRDisplayVector = HeapVector<Member<VRDisplay>>;
129 150
130 enum class PresentationResult { 151 enum class PresentationResult {
131 Requested = 0, 152 Requested = 0,
132 Success = 1, 153 Success = 1,
133 SuccessAlreadyPresenting = 2, 154 SuccessAlreadyPresenting = 2,
134 VRDisplayCannotPresent = 3, 155 VRDisplayCannotPresent = 3,
135 PresentationNotSupportedByDisplay = 4, 156 PresentationNotSupportedByDisplay = 4,
136 VRDisplayNotFound = 5, 157 VRDisplayNotFound = 5,
137 NotInitiatedByUserGesture = 6, 158 NotInitiatedByUserGesture = 6,
138 InvalidNumberOfLayers = 7, 159 InvalidNumberOfLayers = 7,
139 InvalidLayerSource = 8, 160 InvalidLayerSource = 8,
140 LayerSourceMissingWebGLContext = 9, 161 LayerSourceMissingWebGLContext = 9,
141 InvalidLayerBounds = 10, 162 InvalidLayerBounds = 10,
142 ServiceInactive = 11, 163 ServiceInactive = 11,
143 RequestDenied = 12, 164 RequestDenied = 12,
144 PresentationResultMax, // Must be last member of enum. 165 PresentationResultMax, // Must be last member of enum.
145 }; 166 };
146 167
147 void ReportPresentationResult(PresentationResult); 168 void ReportPresentationResult(PresentationResult);
148 169
149 } // namespace blink 170 } // namespace blink
150 171
151 #endif // VRDisplay_h 172 #endif // VRDisplay_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698