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

Side by Side Diff: device/vr/android/gvr/gvr_device.cc

Issue 2508703002: WebVR: Use content CVC size for compositor rendering (Closed)
Patch Set: Undo VrShellImpl changes, use native-side values. 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 #include "device/vr/android/gvr/gvr_device.h" 5 #include "device/vr/android/gvr/gvr_device.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <algorithm> 8 #include <algorithm>
9 9
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 device->rightEye = mojom::VREyeParameters::New(); 48 device->rightEye = mojom::VREyeParameters::New();
49 mojom::VREyeParametersPtr& left_eye = device->leftEye; 49 mojom::VREyeParametersPtr& left_eye = device->leftEye;
50 mojom::VREyeParametersPtr& right_eye = device->rightEye; 50 mojom::VREyeParametersPtr& right_eye = device->rightEye;
51 51
52 left_eye->fieldOfView = mojom::VRFieldOfView::New(); 52 left_eye->fieldOfView = mojom::VRFieldOfView::New();
53 right_eye->fieldOfView = mojom::VRFieldOfView::New(); 53 right_eye->fieldOfView = mojom::VRFieldOfView::New();
54 54
55 left_eye->offset.resize(3); 55 left_eye->offset.resize(3);
56 right_eye->offset.resize(3); 56 right_eye->offset.resize(3);
57 57
58 // TODO(bajones): GVR has a bug that causes it to return bad render target
59 // sizes when the phone is in portait mode. Send arbitrary,
60 // not-horrifically-wrong values instead.
61 // gvr::Sizei render_target_size = gvr_api->GetRecommendedRenderTargetSize();
62 left_eye->renderWidth = 1024; // render_target_size.width / 2;
63 left_eye->renderHeight = 1024; // render_target_size.height;
64
65 right_eye->renderWidth = left_eye->renderWidth;
66 right_eye->renderHeight = left_eye->renderHeight;
67
68 gvr::GvrApi* gvr_api = GetGvrApi(); 58 gvr::GvrApi* gvr_api = GetGvrApi();
69 if (!gvr_api) { 59 if (!gvr_api) {
70 // We may not be able to get an instance of GvrApi right away, so 60 // We may not be able to get an instance of GvrApi right away, so
71 // stub in some data till we have one. 61 // stub in some data till we have one.
72 device->displayName = "Unknown"; 62 device->displayName = "Unknown";
73 63
74 left_eye->fieldOfView->upDegrees = 45; 64 left_eye->fieldOfView->upDegrees = 45;
75 left_eye->fieldOfView->downDegrees = 45; 65 left_eye->fieldOfView->downDegrees = 45;
76 left_eye->fieldOfView->leftDegrees = 45; 66 left_eye->fieldOfView->leftDegrees = 45;
77 left_eye->fieldOfView->rightDegrees = 45; 67 left_eye->fieldOfView->rightDegrees = 45;
68 left_eye->renderWidth = 1024;
mthiesse 2016/11/16 21:30:41 Maybe move this 1024 value used all over the place
klausw 2016/11/16 23:37:39 I've reverted this part of the change to keep the
69 left_eye->renderHeight = 1024;
78 70
79 right_eye->fieldOfView->upDegrees = 45; 71 right_eye->fieldOfView->upDegrees = 45;
80 right_eye->fieldOfView->downDegrees = 45; 72 right_eye->fieldOfView->downDegrees = 45;
81 right_eye->fieldOfView->leftDegrees = 45; 73 right_eye->fieldOfView->leftDegrees = 45;
82 right_eye->fieldOfView->rightDegrees = 45; 74 right_eye->fieldOfView->rightDegrees = 45;
75 right_eye->renderWidth = left_eye->renderHeight;
76 right_eye->renderHeight = left_eye->renderHeight;
83 77
84 left_eye->offset[0] = -0.0; 78 left_eye->offset[0] = -0.0;
85 left_eye->offset[1] = -0.0; 79 left_eye->offset[1] = -0.0;
86 left_eye->offset[2] = -0.03; 80 left_eye->offset[2] = -0.03;
87 81
88 right_eye->offset[0] = 0.0; 82 right_eye->offset[0] = 0.0;
89 right_eye->offset[1] = 0.0; 83 right_eye->offset[1] = 0.0;
90 right_eye->offset[2] = 0.03; 84 right_eye->offset[2] = 0.03;
91 85
86 delegate_->SetWebVRRenderSurfaceSize(2 * left_eye->renderWidth,
87 left_eye->renderHeight);
88
92 return device; 89 return device;
93 } 90 }
94 91
92 // In compositor mode, we have to use the current compositor window's
93 // surface size. Would be nice to change it, but that needs more browser
94 // internals to be modified. TODO(klausw): remove this once we can
95 // pick our own surface size.
96 gvr::Sizei compositor_size = delegate_->GetWebVRCompositorSurfaceSize();
97 left_eye->renderWidth = compositor_size.width / 2;
98 left_eye->renderHeight = compositor_size.height;
99 right_eye->renderWidth = left_eye->renderHeight;
100 right_eye->renderHeight = left_eye->renderHeight;
101
95 std::string vendor = gvr_api->GetViewerVendor(); 102 std::string vendor = gvr_api->GetViewerVendor();
96 std::string model = gvr_api->GetViewerModel(); 103 std::string model = gvr_api->GetViewerModel();
97 device->displayName = vendor + " " + model; 104 device->displayName = vendor + " " + model;
98 105
99 gvr::BufferViewportList gvr_buffer_viewports = 106 gvr::BufferViewportList gvr_buffer_viewports =
100 gvr_api->CreateEmptyBufferViewportList(); 107 gvr_api->CreateEmptyBufferViewportList();
101 gvr_buffer_viewports.SetToRecommendedBufferViewports(); 108 gvr_buffer_viewports.SetToRecommendedBufferViewports();
102 109
103 gvr::BufferViewport eye_viewport = gvr_api->CreateBufferViewport(); 110 gvr::BufferViewport eye_viewport = gvr_api->CreateBufferViewport();
104 gvr_buffer_viewports.GetBufferViewport(GVR_LEFT_EYE, &eye_viewport); 111 gvr_buffer_viewports.GetBufferViewport(GVR_LEFT_EYE, &eye_viewport);
(...skipping 14 matching lines...) Expand all
119 gvr::Mat4f left_eye_mat = gvr_api->GetEyeFromHeadMatrix(GVR_LEFT_EYE); 126 gvr::Mat4f left_eye_mat = gvr_api->GetEyeFromHeadMatrix(GVR_LEFT_EYE);
120 left_eye->offset[0] = -left_eye_mat.m[0][3]; 127 left_eye->offset[0] = -left_eye_mat.m[0][3];
121 left_eye->offset[1] = -left_eye_mat.m[1][3]; 128 left_eye->offset[1] = -left_eye_mat.m[1][3];
122 left_eye->offset[2] = -left_eye_mat.m[2][3]; 129 left_eye->offset[2] = -left_eye_mat.m[2][3];
123 130
124 gvr::Mat4f right_eye_mat = gvr_api->GetEyeFromHeadMatrix(GVR_RIGHT_EYE); 131 gvr::Mat4f right_eye_mat = gvr_api->GetEyeFromHeadMatrix(GVR_RIGHT_EYE);
125 right_eye->offset[0] = -right_eye_mat.m[0][3]; 132 right_eye->offset[0] = -right_eye_mat.m[0][3];
126 right_eye->offset[1] = -right_eye_mat.m[1][3]; 133 right_eye->offset[1] = -right_eye_mat.m[1][3];
127 right_eye->offset[2] = -right_eye_mat.m[2][3]; 134 right_eye->offset[2] = -right_eye_mat.m[2][3];
128 135
136 delegate_->SetWebVRRenderSurfaceSize(2 * left_eye->renderWidth,
137 left_eye->renderHeight);
138
129 return device; 139 return device;
130 } 140 }
131 141
132 mojom::VRPosePtr GvrDevice::GetPose() { 142 mojom::VRPosePtr GvrDevice::GetPose() {
133 TRACE_EVENT0("input", "GvrDevice::GetSensorState"); 143 TRACE_EVENT0("input", "GvrDevice::GetSensorState");
134 144
135 mojom::VRPosePtr pose = mojom::VRPose::New(); 145 mojom::VRPosePtr pose = mojom::VRPose::New();
136 146
137 pose->timestamp = base::Time::Now().ToJsTime(); 147 pose->timestamp = base::Time::Now().ToJsTime();
138 148
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } 259 }
250 260
251 gvr::GvrApi* GvrDevice::GetGvrApi() { 261 gvr::GvrApi* GvrDevice::GetGvrApi() {
252 if (!delegate_) 262 if (!delegate_)
253 return nullptr; 263 return nullptr;
254 264
255 return delegate_->gvr_api(); 265 return delegate_->gvr_api();
256 } 266 }
257 267
258 } // namespace device 268 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698