| 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_gl.h" | 5 #include "chrome/browser/android/vr_shell/vr_shell_gl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 CARDBOARD = 1, | 147 CARDBOARD = 1, |
| 148 DAYDREAM = 2, | 148 DAYDREAM = 2, |
| 149 VIEWER_TYPE_MAX, | 149 VIEWER_TYPE_MAX, |
| 150 }; | 150 }; |
| 151 | 151 |
| 152 int64_t TimeInMicroseconds() { | 152 int64_t TimeInMicroseconds() { |
| 153 return std::chrono::duration_cast<std::chrono::microseconds>( | 153 return std::chrono::duration_cast<std::chrono::microseconds>( |
| 154 std::chrono::steady_clock::now().time_since_epoch()).count(); | 154 std::chrono::steady_clock::now().time_since_epoch()).count(); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void RunVRDisplayInfoCallback( |
| 158 const base::Callback<void(device::mojom::VRDisplayInfoPtr)>& callback, |
| 159 device::mojom::VRDisplayInfoPtr info) { |
| 160 callback.Run(std::move(info)); |
| 161 } |
| 162 |
| 157 } // namespace | 163 } // namespace |
| 158 | 164 |
| 159 VrShellGl::VrShellGl( | 165 VrShellGl::VrShellGl( |
| 160 const base::WeakPtr<VrShell>& weak_vr_shell, | 166 const base::WeakPtr<VrShell>& weak_vr_shell, |
| 161 const base::WeakPtr<VrShellDelegate>& delegate_provider, | 167 const base::WeakPtr<VrShellDelegate>& delegate_provider, |
| 162 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner, | 168 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner, |
| 163 gvr_context* gvr_api, | 169 gvr_context* gvr_api, |
| 164 bool initially_web_vr, | 170 bool initially_web_vr, |
| 165 bool reprojected_rendering) | 171 bool reprojected_rendering) |
| 166 : web_vr_mode_(initially_web_vr), | 172 : web_vr_mode_(initially_web_vr), |
| (...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 939 const gvr::Rectf& right_bounds) { | 945 const gvr::Rectf& right_bounds) { |
| 940 if (frame_index < 0) { | 946 if (frame_index < 0) { |
| 941 webvr_left_viewport_->SetSourceUv(left_bounds); | 947 webvr_left_viewport_->SetSourceUv(left_bounds); |
| 942 webvr_right_viewport_->SetSourceUv(right_bounds); | 948 webvr_right_viewport_->SetSourceUv(right_bounds); |
| 943 } else { | 949 } else { |
| 944 pending_bounds_.emplace( | 950 pending_bounds_.emplace( |
| 945 std::make_pair(frame_index, std::make_pair(left_bounds, right_bounds))); | 951 std::make_pair(frame_index, std::make_pair(left_bounds, right_bounds))); |
| 946 } | 952 } |
| 947 } | 953 } |
| 948 | 954 |
| 949 gvr::GvrApi* VrShellGl::gvr_api() { | |
| 950 return gvr_api_.get(); | |
| 951 } | |
| 952 | |
| 953 void VrShellGl::ContentBoundsChanged(int width, int height) { | 955 void VrShellGl::ContentBoundsChanged(int width, int height) { |
| 954 TRACE_EVENT0("gpu", "VrShellGl::ContentBoundsChanged"); | 956 TRACE_EVENT0("gpu", "VrShellGl::ContentBoundsChanged"); |
| 955 content_tex_css_width_ = width; | 957 content_tex_css_width_ = width; |
| 956 content_tex_css_height_ = height; | 958 content_tex_css_height_ = height; |
| 957 } | 959 } |
| 958 | 960 |
| 959 void VrShellGl::ContentPhysicalBoundsChanged(int width, int height) { | 961 void VrShellGl::ContentPhysicalBoundsChanged(int width, int height) { |
| 960 if (content_surface_texture_.get()) | 962 if (content_surface_texture_.get()) |
| 961 content_surface_texture_->SetDefaultBufferSize(width, height); | 963 content_surface_texture_->SetDefaultBufferSize(width, height); |
| 962 content_tex_physical_size_.width = width; | 964 content_tex_physical_size_.width = width; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1050 | 1052 |
| 1051 gvr::Mat4f head_mat = | 1053 gvr::Mat4f head_mat = |
| 1052 gvr_api_->GetHeadSpaceFromStartSpaceRotation(target_time); | 1054 gvr_api_->GetHeadSpaceFromStartSpaceRotation(target_time); |
| 1053 head_mat = gvr_api_->ApplyNeckModel(head_mat, 1.0f); | 1055 head_mat = gvr_api_->ApplyNeckModel(head_mat, 1.0f); |
| 1054 | 1056 |
| 1055 webvr_head_pose_[frame_index % kPoseRingBufferSize] = head_mat; | 1057 webvr_head_pose_[frame_index % kPoseRingBufferSize] = head_mat; |
| 1056 | 1058 |
| 1057 callback.Run(VrShell::VRPosePtrFromGvrPose(head_mat), time, frame_index); | 1059 callback.Run(VrShell::VRPosePtrFromGvrPose(head_mat), time, frame_index); |
| 1058 } | 1060 } |
| 1059 | 1061 |
| 1062 void VrShellGl::ResetPose() { |
| 1063 // Should never call RecenterTracking when using with Daydream viewers. On |
| 1064 // those devices recentering should only be done via the controller. |
| 1065 if (gvr_api_ && gvr_api_->GetViewerType() == GVR_VIEWER_TYPE_CARDBOARD) |
| 1066 gvr_api_->RecenterTracking(); |
| 1067 } |
| 1068 |
| 1069 void VrShellGl::CreateVRDisplayInfo( |
| 1070 const base::Callback<void(device::mojom::VRDisplayInfoPtr)>& callback, |
| 1071 uint32_t device_id) { |
| 1072 device::mojom::VRDisplayInfoPtr info = VrShell::CreateVRDisplayInfo( |
| 1073 gvr_api_.get(), content_tex_physical_size_, device_id); |
| 1074 main_thread_task_runner_->PostTask( |
| 1075 FROM_HERE, |
| 1076 base::Bind(&RunVRDisplayInfoCallback, callback, base::Passed(&info))); |
| 1077 } |
| 1078 |
| 1060 } // namespace vr_shell | 1079 } // namespace vr_shell |
| OLD | NEW |