| 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 8a0c52a371f1e3236275357f264c2d8266d805d0..7603728452db5f52b5f6d5b166de99d5e2ddf64a 100644
|
| --- a/chrome/browser/android/vr_shell/vr_shell.cc
|
| +++ b/chrome/browser/android/vr_shell/vr_shell.cc
|
| @@ -27,6 +27,7 @@
|
| #include "content/public/browser/render_widget_host_view.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/common/referrer.h"
|
| +#include "device/vr/android/gvr/gvr_device.h"
|
| #include "device/vr/android/gvr/gvr_device_provider.h"
|
| #include "jni/VrShellImpl_jni.h"
|
| #include "third_party/WebKit/public/platform/WebInputEvent.h"
|
| @@ -75,6 +76,7 @@ VrShell::VrShell(JNIEnv* env,
|
| metrics_helper_(base::MakeUnique<VrMetricsHelper>(main_contents_)),
|
| main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
|
| reprojected_rendering_(reprojected_rendering),
|
| + gvr_api_(gvr_api),
|
| weak_ptr_factory_(this) {
|
| DCHECK(g_instance == nullptr);
|
| g_instance = this;
|
| @@ -237,16 +239,6 @@ void VrShell::OnLoadProgressChanged(
|
| html_interface_->SetLoadProgress(progress);
|
| }
|
|
|
| -void VrShell::SetWebVRRenderSurfaceSize(int width, int height) {
|
| - // TODO(klausw,crbug.com/655722): Change the GVR render size and set the WebVR
|
| - // render surface size.
|
| -}
|
| -
|
| -gvr::Sizei VrShell::GetWebVRCompositorSurfaceSize() {
|
| - const gfx::Size& size = content_compositor_->GetWindowBounds();
|
| - return {size.width(), size.height()};
|
| -}
|
| -
|
| void VrShell::SetWebVRSecureOrigin(bool secure_origin) {
|
| // TODO(cjgrant): Align this state with the logic that drives the omnibox.
|
| html_interface_->SetWebVRSecureOrigin(secure_origin);
|
| @@ -262,14 +254,21 @@ void VrShell::UpdateWebVRTextureBounds(int16_t frame_index,
|
| left_bounds, right_bounds));
|
| }
|
|
|
| -// TODO(mthiesse): Do not expose GVR API outside of GL thread.
|
| -// It's not thread-safe.
|
| -gvr::GvrApi* VrShell::gvr_api() {
|
| - if (gl_thread_->GetVrShellGlUnsafe()) {
|
| - return gl_thread_->GetVrShellGlUnsafe()->gvr_api();
|
| - }
|
| - CHECK(false);
|
| - return nullptr;
|
| +bool VrShell::SupportsPresentation() {
|
| + return true;
|
| +}
|
| +
|
| +void VrShell::ResetPose() {
|
| + gl_thread_->task_runner()->PostTask(
|
| + FROM_HERE, base::Bind(&VrShellGl::ResetPose, gl_thread_->GetVrShellGl()));
|
| +}
|
| +
|
| +void VrShell::CreateVRDisplayInfo(
|
| + const base::Callback<void(device::mojom::VRDisplayInfoPtr)>& callback,
|
| + uint32_t device_id) {
|
| + PostToGlThreadWhenReady(base::Bind(&VrShellGl::CreateVRDisplayInfo,
|
| + gl_thread_->GetVrShellGl(),
|
| + callback, device_id));
|
| }
|
|
|
| void VrShell::SurfacesChanged(jobject content_surface, jobject ui_surface) {
|
| @@ -278,7 +277,7 @@ void VrShell::SurfacesChanged(jobject content_surface, jobject ui_surface) {
|
| }
|
|
|
| void VrShell::GvrDelegateReady() {
|
| - delegate_provider_->SetDelegate(this);
|
| + delegate_provider_->SetDelegate(this, gvr_api_);
|
| }
|
|
|
| void VrShell::AppButtonPressed() {
|
| @@ -290,9 +289,9 @@ void VrShell::AppButtonPressed() {
|
| if (html_interface_->GetMode() == UiInterface::Mode::WEB_VR) {
|
| if (delegate_provider_->device_provider()) {
|
| if (html_interface_->GetMenuMode()) {
|
| - delegate_provider_->device_provider()->OnDisplayBlur();
|
| + delegate_provider_->device_provider()->Device()->OnBlur();
|
| } else {
|
| - delegate_provider_->device_provider()->OnDisplayFocus();
|
| + delegate_provider_->device_provider()->Device()->OnFocus();
|
| }
|
| }
|
| }
|
| @@ -480,6 +479,55 @@ device::mojom::VRPosePtr VrShell::VRPosePtrFromGvrPose(gvr::Mat4f head_mat) {
|
| return pose;
|
| }
|
|
|
| +device::mojom::VRDisplayInfoPtr VrShell::CreateVRDisplayInfo(
|
| + gvr::GvrApi* gvr_api, gvr::Sizei compositor_size, uint32_t device_id) {
|
| + TRACE_EVENT0("input", "GvrDevice::GetVRDevice");
|
| +
|
| + device::mojom::VRDisplayInfoPtr device = device::mojom::VRDisplayInfo::New();
|
| +
|
| + device->index = device_id;
|
| +
|
| + device->capabilities = device::mojom::VRDisplayCapabilities::New();
|
| + device->capabilities->hasOrientation = true;
|
| + device->capabilities->hasPosition = false;
|
| + device->capabilities->hasExternalDisplay = false;
|
| + device->capabilities->canPresent = true;
|
| +
|
| + std::string vendor = gvr_api->GetViewerVendor();
|
| + std::string model = gvr_api->GetViewerModel();
|
| + device->displayName = vendor + " " + model;
|
| +
|
| + gvr::BufferViewportList gvr_buffer_viewports =
|
| + gvr_api->CreateEmptyBufferViewportList();
|
| + gvr_buffer_viewports.SetToRecommendedBufferViewports();
|
| +
|
| + device->leftEye = device::mojom::VREyeParameters::New();
|
| + device->rightEye = device::mojom::VREyeParameters::New();
|
| + for (auto eye : {GVR_LEFT_EYE, GVR_RIGHT_EYE}) {
|
| + device::mojom::VREyeParametersPtr& eye_params =
|
| + (eye == GVR_LEFT_EYE) ? device->leftEye : device->rightEye;
|
| + eye_params->fieldOfView = device::mojom::VRFieldOfView::New();
|
| + eye_params->offset.resize(3);
|
| + eye_params->renderWidth = compositor_size.width / 2;
|
| + eye_params->renderHeight = compositor_size.height;
|
| +
|
| + gvr::BufferViewport eye_viewport = gvr_api->CreateBufferViewport();
|
| + gvr_buffer_viewports.GetBufferViewport(eye, &eye_viewport);
|
| + gvr::Rectf eye_fov = eye_viewport.GetSourceFov();
|
| + eye_params->fieldOfView->upDegrees = eye_fov.top;
|
| + eye_params->fieldOfView->downDegrees = eye_fov.bottom;
|
| + eye_params->fieldOfView->leftDegrees = eye_fov.left;
|
| + eye_params->fieldOfView->rightDegrees = eye_fov.right;
|
| +
|
| + gvr::Mat4f eye_mat = gvr_api->GetEyeFromHeadMatrix(eye);
|
| + eye_params->offset[0] = -eye_mat.m[0][3];
|
| + eye_params->offset[1] = -eye_mat.m[1][3];
|
| + eye_params->offset[2] = -eye_mat.m[2][3];
|
| + }
|
| +
|
| + return device;
|
| +}
|
| +
|
| // ----------------------------------------------------------------------------
|
| // Native JNI methods
|
| // ----------------------------------------------------------------------------
|
| @@ -496,7 +544,7 @@ jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj,
|
| reinterpret_cast<ui::WindowAndroid*>(content_window_android),
|
| content::WebContents::FromJavaWebContents(ui_web_contents),
|
| reinterpret_cast<ui::WindowAndroid*>(ui_window_android),
|
| - for_web_vr, VrShellDelegate::GetNativeDelegate(env, delegate),
|
| + for_web_vr, VrShellDelegate::GetNativeVrShellDelegate(env, delegate),
|
| reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering));
|
| }
|
|
|
|
|