| OLD | NEW |
| 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 "chrome/browser/android/vr_shell/vr_shell.h" | 5 #include "chrome/browser/android/vr_shell/vr_shell.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram_macros.h" | 7 #include "base/metrics/histogram_macros.h" |
| 8 #include "chrome/browser/android/vr_shell/ui_elements.h" | 8 #include "chrome/browser/android/vr_shell/ui_elements.h" |
| 9 #include "chrome/browser/android/vr_shell/ui_interface.h" | 9 #include "chrome/browser/android/vr_shell/ui_interface.h" |
| 10 #include "chrome/browser/android/vr_shell/ui_scene.h" | 10 #include "chrome/browser/android/vr_shell/ui_scene.h" |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 } | 558 } |
| 559 if (rect->lock_to_fov) { | 559 if (rect->lock_to_fov) { |
| 560 head_locked_elements.push_back(rect.get()); | 560 head_locked_elements.push_back(rect.get()); |
| 561 } else { | 561 } else { |
| 562 world_elements.push_back(rect.get()); | 562 world_elements.push_back(rect.get()); |
| 563 } | 563 } |
| 564 } | 564 } |
| 565 | 565 |
| 566 bool not_web_vr = html_interface_->GetMode() != UiInterface::Mode::WEB_VR; | 566 bool not_web_vr = html_interface_->GetMode() != UiInterface::Mode::WEB_VR; |
| 567 | 567 |
| 568 glEnable(GL_CULL_FACE); |
| 569 glEnable(GL_DEPTH_TEST); |
| 570 glDepthMask(GL_TRUE); |
| 571 |
| 568 if (not_web_vr) { | 572 if (not_web_vr) { |
| 569 glEnable(GL_CULL_FACE); | |
| 570 glEnable(GL_DEPTH_TEST); | |
| 571 glEnable(GL_SCISSOR_TEST); | |
| 572 glClearColor(0.1f, 0.1f, 0.1f, 1.0f); | 573 glClearColor(0.1f, 0.1f, 0.1f, 1.0f); |
| 574 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
| 573 } | 575 } |
| 574 | 576 |
| 575 DrawUiView(&head_pose, world_elements, not_web_vr); | 577 DrawUiView(&head_pose, world_elements); |
| 576 | 578 |
| 577 if (!head_locked_elements.empty()) { | 579 if (!head_locked_elements.empty()) { |
| 578 // Switch to head-locked viewports. | 580 // Switch to head-locked viewports. |
| 579 size_t last_viewport = buffer_viewport_list_->GetSize(); | 581 size_t last_viewport = buffer_viewport_list_->GetSize(); |
| 580 buffer_viewport_list_->SetBufferViewport(last_viewport++, | 582 buffer_viewport_list_->SetBufferViewport(last_viewport++, |
| 581 *headlocked_left_viewport_); | 583 *headlocked_left_viewport_); |
| 582 buffer_viewport_list_->SetBufferViewport(last_viewport++, | 584 buffer_viewport_list_->SetBufferViewport(last_viewport++, |
| 583 *headlocked_right_viewport_); | 585 *headlocked_right_viewport_); |
| 584 | 586 |
| 585 // Bind the headlocked framebuffer. | 587 // Bind the headlocked framebuffer. |
| 586 frame.BindBuffer(kFrameHeadlockedBuffer); | 588 frame.BindBuffer(kFrameHeadlockedBuffer); |
| 587 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); | 589 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); |
| 588 DrawUiView(nullptr, head_locked_elements, true); | 590 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
| 591 DrawUiView(nullptr, head_locked_elements); |
| 589 } | 592 } |
| 590 } | 593 } |
| 591 | 594 |
| 592 void VrShell::DrawUiView(const gvr::Mat4f* head_pose, | 595 void VrShell::DrawUiView(const gvr::Mat4f* head_pose, |
| 593 const std::vector<const ContentRectangle*>& elements, | 596 const std::vector<const ContentRectangle*>& elements) { |
| 594 bool clear) { | |
| 595 for (auto eye : {GVR_LEFT_EYE, GVR_RIGHT_EYE}) { | 597 for (auto eye : {GVR_LEFT_EYE, GVR_RIGHT_EYE}) { |
| 596 buffer_viewport_list_->GetBufferViewport(eye, buffer_viewport_.get()); | 598 buffer_viewport_list_->GetBufferViewport(eye, buffer_viewport_.get()); |
| 597 | 599 |
| 598 gvr::Mat4f view_matrix = gvr_api_->GetEyeFromHeadMatrix(eye); | 600 gvr::Mat4f view_matrix = gvr_api_->GetEyeFromHeadMatrix(eye); |
| 599 if (head_pose != nullptr) { | 601 if (head_pose != nullptr) { |
| 600 view_matrix = MatrixMul(view_matrix, *head_pose); | 602 view_matrix = MatrixMul(view_matrix, *head_pose); |
| 601 } | 603 } |
| 602 | 604 |
| 603 gvr::Recti pixel_rect = | 605 gvr::Recti pixel_rect = |
| 604 CalculatePixelSpaceRect(render_size_, buffer_viewport_->GetSourceUv()); | 606 CalculatePixelSpaceRect(render_size_, buffer_viewport_->GetSourceUv()); |
| 605 glViewport(pixel_rect.left, pixel_rect.bottom, | 607 glViewport(pixel_rect.left, pixel_rect.bottom, |
| 606 pixel_rect.right - pixel_rect.left, | 608 pixel_rect.right - pixel_rect.left, |
| 607 pixel_rect.top - pixel_rect.bottom); | 609 pixel_rect.top - pixel_rect.bottom); |
| 608 glScissor(pixel_rect.left, pixel_rect.bottom, | |
| 609 pixel_rect.right - pixel_rect.left, | |
| 610 pixel_rect.top - pixel_rect.bottom); | |
| 611 | |
| 612 if (clear) { | |
| 613 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
| 614 } | |
| 615 | 610 |
| 616 const gvr::Mat4f render_matrix = MatrixMul( | 611 const gvr::Mat4f render_matrix = MatrixMul( |
| 617 PerspectiveMatrixFromView( | 612 PerspectiveMatrixFromView( |
| 618 buffer_viewport_->GetSourceFov(), kZNear, kZFar), | 613 buffer_viewport_->GetSourceFov(), kZNear, kZFar), |
| 619 view_matrix); | 614 view_matrix); |
| 620 | 615 |
| 621 DrawElements(render_matrix, elements); | 616 DrawElements(render_matrix, elements); |
| 622 if (head_pose != nullptr && | 617 if (head_pose != nullptr && |
| 623 html_interface_->GetMode() != UiInterface::Mode::WEB_VR) { | 618 html_interface_->GetMode() != UiInterface::Mode::WEB_VR) { |
| 624 DrawCursor(render_matrix); | 619 DrawCursor(render_matrix); |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 904 const JavaParamRef<jobject>& ui_web_contents, | 899 const JavaParamRef<jobject>& ui_web_contents, |
| 905 jlong ui_window_android) { | 900 jlong ui_window_android) { |
| 906 return reinterpret_cast<intptr_t>(new VrShell( | 901 return reinterpret_cast<intptr_t>(new VrShell( |
| 907 env, obj, content::WebContents::FromJavaWebContents(content_web_contents), | 902 env, obj, content::WebContents::FromJavaWebContents(content_web_contents), |
| 908 reinterpret_cast<ui::WindowAndroid*>(content_window_android), | 903 reinterpret_cast<ui::WindowAndroid*>(content_window_android), |
| 909 content::WebContents::FromJavaWebContents(ui_web_contents), | 904 content::WebContents::FromJavaWebContents(ui_web_contents), |
| 910 reinterpret_cast<ui::WindowAndroid*>(ui_window_android))); | 905 reinterpret_cast<ui::WindowAndroid*>(ui_window_android))); |
| 911 } | 906 } |
| 912 | 907 |
| 913 } // namespace vr_shell | 908 } // namespace vr_shell |
| OLD | NEW |