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

Unified Diff: chrome/browser/android/vr_shell/vr_shell.cc

Issue 2433253002: Add passive and FOV-locked properties to UI elements. (Closed)
Patch Set: Add passive and FOV-locked properties to UI elements. Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/android/vr_shell/vr_shell.cc
diff --git a/chrome/browser/android/vr_shell/vr_shell.cc b/chrome/browser/android/vr_shell/vr_shell.cc
index d4e5cf2979ce60cb9f8dd5a9767d9ea2c4fe6b1f..32158015a068d07bcf02384653c7bd00cd4199e7 100644
--- a/chrome/browser/android/vr_shell/vr_shell.cc
+++ b/chrome/browser/android/vr_shell/vr_shell.cc
@@ -326,7 +326,7 @@ void VrShell::UpdateController(const gvr::Vec3f& forward_vector) {
for (std::size_t i = 0; i < scene_->GetUiElements().size(); ++i) {
const ContentRectangle* plane = scene_->GetUiElements()[i].get();
- if (!plane->visible) {
+ if (!plane->visible || plane->passive) {
continue;
}
float distance_to_plane = plane->GetRayDistance(kOrigin, eye_to_target);
@@ -456,12 +456,6 @@ void VrShell::DrawVrShell(const gvr::Mat4f& head_pose) {
UpdateController(GetForwardVector(head_pose));
- // Everything should be positioned now, ready for drawing.
- gvr::Mat4f left_eye_view_matrix =
- MatrixMul(gvr_api_->GetEyeFromHeadMatrix(GVR_LEFT_EYE), head_pose);
- gvr::Mat4f right_eye_view_matrix =
- MatrixMul(gvr_api_->GetEyeFromHeadMatrix(GVR_RIGHT_EYE), head_pose);
-
// Use culling to remove back faces.
glEnable(GL_CULL_FACE);
@@ -473,14 +467,18 @@ void VrShell::DrawVrShell(const gvr::Mat4f& head_pose) {
buffer_viewport_list_->GetBufferViewport(GVR_LEFT_EYE,
buffer_viewport_.get());
- DrawEye(left_eye_view_matrix, *buffer_viewport_);
+ DrawEye(GVR_LEFT_EYE, head_pose, *buffer_viewport_);
buffer_viewport_list_->GetBufferViewport(GVR_RIGHT_EYE,
buffer_viewport_.get());
- DrawEye(right_eye_view_matrix, *buffer_viewport_);
+ DrawEye(GVR_RIGHT_EYE, head_pose, *buffer_viewport_);
}
-void VrShell::DrawEye(const gvr::Mat4f& view_matrix,
+void VrShell::DrawEye(gvr::Eye eye,
+ const gvr::Mat4f& head_pose,
const gvr::BufferViewport& params) {
+ gvr::Mat4f eye_matrix = gvr_api_->GetEyeFromHeadMatrix(eye);
+ gvr::Mat4f head_matrix = MatrixMul(eye_matrix, head_pose);
mthiesse 2016/10/20 18:15:32 why the rename from view_matrix to head_matrix? he
cjgrant 2016/10/21 14:14:50 Done.
+
gvr::Recti pixel_rect =
CalculatePixelSpaceRect(render_size_, params.GetSourceUv());
glViewport(pixel_rect.left, pixel_rect.bottom,
@@ -490,15 +488,18 @@ void VrShell::DrawEye(const gvr::Mat4f& view_matrix,
pixel_rect.right - pixel_rect.left,
pixel_rect.top - pixel_rect.bottom);
- gvr::Mat4f render_matrix = MatrixMul(
+ const gvr::Mat4f fov_render_matrix = MatrixMul(
+ PerspectiveMatrixFromView(params.GetSourceFov(), kZNear, kZFar),
+ eye_matrix);
+ const gvr::Mat4f world_render_matrix = MatrixMul(
PerspectiveMatrixFromView(params.GetSourceFov(), kZNear, kZFar),
- view_matrix);
+ head_matrix);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// TODO(mthiesse): Draw order for transparency.
- DrawUI(render_matrix);
- DrawCursor(render_matrix);
+ DrawUI(world_render_matrix, fov_render_matrix);
+ DrawCursor(world_render_matrix);
}
bool VrShell::IsUiTextureReady() {
@@ -514,7 +515,8 @@ Rectf VrShell::MakeUiGlCopyRect(Recti pixel_rect) {
static_cast<float>(pixel_rect.height) / ui_tex_height_});
}
-void VrShell::DrawUI(const gvr::Mat4f& render_matrix) {
+void VrShell::DrawUI(const gvr::Mat4f& world_matrix,
+ const gvr::Mat4f& fov_matrix) {
for (const auto& rect : scene_->GetUiElements()) {
if (!rect->visible) {
continue;
@@ -535,7 +537,9 @@ void VrShell::DrawUI(const gvr::Mat4f& render_matrix) {
texture_handle = ui_texture_id_;
}
- gvr::Mat4f transform = MatrixMul(render_matrix, rect->transform.to_world);
+ const gvr::Mat4f& view_matrix =
+ rect->lock_to_fov ? fov_matrix : world_matrix;
+ gvr::Mat4f transform = MatrixMul(view_matrix, rect->transform.to_world);
vr_shell_renderer_->GetTexturedQuadRenderer()->Draw(
texture_handle, transform, copy_rect);
}

Powered by Google App Engine
This is Rietveld 408576698