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

Side by Side Diff: Source/modules/vr/VRHardwareUnit.cpp

Issue 848053002: Adding WebVR interface to Blink (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Addressed sigbjornf@'s epic amount of feedback Created 5 years, 10 months 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
(Empty)
1 // Copyright 2015 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 #include "config.h"
6 #include "modules/vr/VRHardwareUnit.h"
7
8 #include "modules/vr/HMDVRDevice.h"
9 #include "modules/vr/PositionSensorVRDevice.h"
10 #include "modules/vr/VRDevice.h"
11 #include "public/platform/Platform.h"
12
13 namespace blink {
14
15 VRHardwareUnit::VRHardwareUnit()
16 : m_frameIndex(0)
17 {
18 m_positionState = VRPositionState::create();
19 m_currentFOVLeft = new VRFieldOfView();
20 m_currentFOVRight = new VRFieldOfView();
21 }
22
23 VRHardwareUnit::~VRHardwareUnit()
24 {
25 }
26
27 void VRHardwareUnit::updateFromWebVRDevice(const WebVRDevice& device)
28 {
29 m_index = device.index;
30 m_hardwareUnitId = device.deviceId;
31
32 if (device.flags & WebVRDeviceTypeHMD) {
33 if (!m_hmd)
34 m_hmd = new HMDVRDevice(this);
35 m_hmd->updateFromWebVRDevice(device);
36 } else if (m_hmd) {
37 m_hmd.clear();
38 }
39
40 if (device.flags & WebVRDeviceTypePosition) {
41 if (!m_positionSensor)
42 m_positionSensor = new PositionSensorVRDevice(this);
43 m_positionSensor->updateFromWebVRDevice(device);
44 } else if (m_positionSensor) {
45 m_positionSensor.clear();
46 }
47 }
48
49 void VRHardwareUnit::addDevicesToVector(HeapVector<Member<VRDevice>>& vrDevices)
50 {
51 if (m_hmd)
52 vrDevices.append(m_hmd);
53
54 if (m_positionSensor)
55 vrDevices.append(m_positionSensor);
56 }
57
58 VRPositionState* VRHardwareUnit::getPositionState(double timeOffset)
59 {
60 blink::WebHMDSensorState state;
61 blink::Platform::current()->getHMDSensorState(m_index, timeOffset, state);
62
63 m_positionState->setState(state);
64 m_frameIndex = state.frameIndex;
65
66 return m_positionState;
67 }
68
69 void VRHardwareUnit::setFieldOfView(VREye eye, VRFieldOfView* fov)
70 {
71 switch (eye) {
72 case VREyeLeft:
73 m_currentFOVLeft->setFromVRFieldOfView(*fov);
74 break;
75 case VREyeRight:
76 m_currentFOVRight->setFromVRFieldOfView(*fov);
77 break;
78 default:
79 ASSERT_NOT_REACHED();
80 }
81 }
82
83 VRFieldOfView* VRHardwareUnit::getCurrentEyeFieldOfView(VREye eye) const
84 {
85 switch (eye) {
86 case VREyeLeft:
87 return new VRFieldOfView(*m_currentFOVLeft);
88 case VREyeRight:
89 return new VRFieldOfView(*m_currentFOVRight);
90 default:
91 ASSERT_NOT_REACHED();
92 return nullptr;
93 }
94 }
95
96 WebVRFieldOfView VRHardwareUnit::getFieldOfView(VREye eye) const
97 {
98 VRFieldOfView* srcFov;
99 blink::WebVRFieldOfView fov;
100
101 switch (eye) {
102 case VREyeLeft:
103 srcFov = m_currentFOVLeft;
104 break;
105 case VREyeRight:
106 srcFov = m_currentFOVRight;
107 break;
108 default:
109 ASSERT_NOT_REACHED();
110 return fov;
111 }
112
113 fov.upDegrees = srcFov->upDegrees();
114 fov.downDegrees = srcFov->downDegrees();
115 fov.leftDegrees = srcFov->leftDegrees();
116 fov.rightDegrees = srcFov->rightDegrees();
117 return fov;
118 }
119
120 void VRHardwareUnit::trace(Visitor* visitor)
121 {
122 visitor->trace(m_positionState);
123 visitor->trace(m_currentFOVLeft);
124 visitor->trace(m_currentFOVRight);
125 visitor->trace(m_hmd);
126 visitor->trace(m_positionSensor);
127 }
128
129 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698