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

Side by Side Diff: device/vr/openvr/openvr_device.cc

Issue 2822983002: Implement displayName and stageParameters of VRDisplay for OpenVRDevice (Closed)
Patch Set: rebase Created 3 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 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 #define _USE_MATH_DEFINES // for M_PI 5 #define _USE_MATH_DEFINES // for M_PI
6 #include "device/vr/openvr/openvr_device.h" 6 #include "device/vr/openvr/openvr_device.h"
7 #include <math.h> 7 #include <math.h>
8 #include "third_party/openvr/src/headers/openvr.h" 8 #include "third_party/openvr/src/headers/openvr.h"
9 9
10 namespace { 10 namespace {
(...skipping 15 matching lines...) Expand all
26 26
27 std::vector<float> HmdVector3ToWebVR(const vr::HmdVector3_t& vec) { 27 std::vector<float> HmdVector3ToWebVR(const vr::HmdVector3_t& vec) {
28 std::vector<float> out; 28 std::vector<float> out;
29 out.resize(3); 29 out.resize(3);
30 out[0] = vec.v[0]; 30 out[0] = vec.v[0];
31 out[1] = vec.v[1]; 31 out[1] = vec.v[1];
32 out[2] = vec.v[2]; 32 out[2] = vec.v[2];
33 return out; 33 return out;
34 } 34 }
35 35
36 std::string GetOpenVRString(vr::IVRSystem* vr_system,
37 vr::TrackedDeviceProperty prop) {
38 std::string out;
39
40 vr::TrackedPropertyError error = vr::TrackedProp_Success;
41 char openvr_string[vr::k_unMaxPropertyStringSize];
42 vr_system->GetStringTrackedDeviceProperty(
43 vr::k_unTrackedDeviceIndex_Hmd, prop, openvr_string,
44 vr::k_unMaxPropertyStringSize, &error);
45
46 if (error == vr::TrackedProp_Success)
47 out = openvr_string;
48
49 return out;
50 }
51
52 std::vector<float> HmdMatrix34ToWebVRTransformMatrix(
53 const vr::HmdMatrix34_t& mat) {
54 std::vector<float> transform;
55 transform.resize(16);
56 transform[0] = mat.m[0][0];
57 transform[1] = mat.m[1][0];
58 transform[2] = mat.m[2][0];
59 transform[3] = 0.0f;
60 transform[4] = mat.m[0][1];
61 transform[5] = mat.m[1][1];
62 transform[6] = mat.m[2][1];
63 transform[7] = 0.0f;
64 transform[8] = mat.m[0][2];
65 transform[9] = mat.m[1][2];
66 transform[10] = mat.m[2][2];
67 transform[11] = 0.0f;
68 transform[12] = mat.m[0][3];
69 transform[13] = mat.m[1][3];
70 transform[14] = mat.m[2][3];
71 transform[15] = 1.0f;
72 return transform;
73 }
74
36 } // namespace 75 } // namespace
37 76
38 namespace device { 77 namespace device {
39 78
40 OpenVRDevice::OpenVRDevice() {} 79 OpenVRDevice::OpenVRDevice() {}
41 OpenVRDevice::~OpenVRDevice() {} 80 OpenVRDevice::~OpenVRDevice() {}
42 81
43 void OpenVRDevice::CreateVRDisplayInfo( 82 void OpenVRDevice::CreateVRDisplayInfo(
44 const base::Callback<void(mojom::VRDisplayInfoPtr)>& on_created) { 83 const base::Callback<void(mojom::VRDisplayInfoPtr)>& on_created) {
45 vr::EVRInitError init_error; 84 vr::EVRInitError init_error;
46 auto vr_system = 85 auto vr_system =
47 vr::VR_Init(&init_error, vr::EVRApplicationType::VRApplication_Scene); 86 vr::VR_Init(&init_error, vr::EVRApplicationType::VRApplication_Scene);
48 87
49 if (init_error != vr::VRInitError_None) { 88 if (init_error != vr::VRInitError_None) {
50 LOG(ERROR) << vr::VR_GetVRInitErrorAsEnglishDescription(init_error); 89 LOG(ERROR) << vr::VR_GetVRInitErrorAsEnglishDescription(init_error);
51 on_created.Run(nullptr); 90 on_created.Run(nullptr);
52 return; 91 return;
53 } 92 }
54 93
55 mojom::VRDisplayInfoPtr device = mojom::VRDisplayInfo::New(); 94 mojom::VRDisplayInfoPtr device = mojom::VRDisplayInfo::New();
56 device->index = id(); 95 device->index = id();
96 device->displayName =
97 GetOpenVRString(vr_system, vr::Prop_ManufacturerName_String) + " " +
98 GetOpenVRString(vr_system, vr::Prop_ModelNumber_String);
57 device->capabilities = mojom::VRDisplayCapabilities::New(); 99 device->capabilities = mojom::VRDisplayCapabilities::New();
58 device->capabilities->hasPosition = true; 100 device->capabilities->hasPosition = true;
59 device->capabilities->hasExternalDisplay = true; 101 device->capabilities->hasExternalDisplay = true;
60 device->capabilities->canPresent = false; 102 device->capabilities->canPresent = false;
61 103
62 device->leftEye = mojom::VREyeParameters::New(); 104 device->leftEye = mojom::VREyeParameters::New();
63 device->rightEye = mojom::VREyeParameters::New(); 105 device->rightEye = mojom::VREyeParameters::New();
64 mojom::VREyeParametersPtr& left_eye = device->leftEye; 106 mojom::VREyeParametersPtr& left_eye = device->leftEye;
65 mojom::VREyeParametersPtr& right_eye = device->rightEye; 107 mojom::VREyeParametersPtr& right_eye = device->rightEye;
66 108
(...skipping 16 matching lines...) Expand all
83 right_eye->offset[1] = 0.0; 125 right_eye->offset[1] = 0.0;
84 right_eye->offset[2] = 0.0; 126 right_eye->offset[2] = 0.0;
85 127
86 uint32_t width, height; 128 uint32_t width, height;
87 vr_system->GetRecommendedRenderTargetSize(&width, &height); 129 vr_system->GetRecommendedRenderTargetSize(&width, &height);
88 left_eye->renderWidth = width; 130 left_eye->renderWidth = width;
89 left_eye->renderHeight = height; 131 left_eye->renderHeight = height;
90 right_eye->renderWidth = left_eye->renderWidth; 132 right_eye->renderWidth = left_eye->renderWidth;
91 right_eye->renderHeight = left_eye->renderHeight; 133 right_eye->renderHeight = left_eye->renderHeight;
92 134
135 device->stageParameters = mojom::VRStageParameters::New();
136 vr::HmdMatrix34_t mat =
137 vr_system->GetSeatedZeroPoseToStandingAbsoluteTrackingPose();
138 device->stageParameters->standingTransform =
139 HmdMatrix34ToWebVRTransformMatrix(mat);
140
141 vr::IVRChaperone* chaperone = vr::VRChaperone();
142 if (chaperone) {
143 chaperone->GetPlayAreaSize(&device->stageParameters->sizeX,
144 &device->stageParameters->sizeZ);
145 } else {
146 device->stageParameters->sizeX = 0.0f;
147 device->stageParameters->sizeZ = 0.0f;
148 }
149
93 render_loop_ = std::make_unique<OpenVRRenderLoop>(vr_system); 150 render_loop_ = std::make_unique<OpenVRRenderLoop>(vr_system);
94 151
95 on_created.Run(std::move(device)); 152 on_created.Run(std::move(device));
96 } 153 }
97 154
98 void OpenVRDevice::RequestPresent(mojom::VRSubmitFrameClientPtr submit_client, 155 void OpenVRDevice::RequestPresent(mojom::VRSubmitFrameClientPtr submit_client,
99 const base::Callback<void(bool)>& callback) { 156 const base::Callback<void(bool)>& callback) {
100 callback.Run(false); 157 callback.Run(false);
101 // We don't support presentation currently. 158 // We don't support presentation currently.
102 } 159 }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 base::TimeDelta time = base::TimeDelta::FromSecondsD(2.0); 249 base::TimeDelta time = base::TimeDelta::FromSecondsD(2.0);
193 250
194 device::mojom::VRPosePtr pose = getPose(); 251 device::mojom::VRPosePtr pose = getPose();
195 Sleep(11); // TODO (billorr): Use real vsync timing instead of a sleep (this 252 Sleep(11); // TODO (billorr): Use real vsync timing instead of a sleep (this
196 // sleep just throttles vsyncs so we don't fill message queues). 253 // sleep just throttles vsyncs so we don't fill message queues).
197 callback.Run(std::move(pose), time, frame, 254 callback.Run(std::move(pose), time, frame,
198 device::mojom::VRVSyncProvider::Status::SUCCESS); 255 device::mojom::VRVSyncProvider::Status::SUCCESS);
199 } 256 }
200 257
201 } // namespace device 258 } // namespace device
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698