Chromium Code Reviews| Index: chrome/browser/android/vr_shell/vr_shell_delegate.cc |
| diff --git a/chrome/browser/android/vr_shell/vr_shell_delegate.cc b/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
| index 606a641702abb96ca529c98b09e560d021e38e8e..bd4397b716e32d3b189291af1663f25b783f316d 100644 |
| --- a/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
| +++ b/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
| @@ -13,6 +13,32 @@ using base::android::AttachCurrentThread; |
| namespace vr_shell { |
| +// A non presenting delegate for magic window mode. |
| +class GvrNonPresentingDelegate : public device::GvrDelegate { |
| + public: |
| + explicit GvrNonPresentingDelegate(jlong context) { |
| + gvr_api_ = |
| + gvr::GvrApi::WrapNonOwned(reinterpret_cast<gvr_context*>(context)); |
| + } |
| + |
| + virtual ~GvrNonPresentingDelegate() {} |
|
David Trainor- moved to gerrit
2016/10/13 03:24:14
= default;
bshe
2016/10/13 14:06:28
Done.
|
| + |
| + // GvrDelegate implementation |
| + void SetWebVRSecureOrigin(bool secure_origin) override {} |
| + void SubmitWebVRFrame() override {} |
| + void UpdateWebVRTextureBounds(int eye, |
| + float left, |
| + float top, |
| + float width, |
| + float height) override {} |
| + void SetGvrPoseForWebVr(const gvr::Mat4f& pose, |
| + uint32_t pose_index) override {} |
| + gvr::GvrApi* gvr_api() override { return gvr_api_.get(); } |
| + |
| + private: |
| + std::unique_ptr<gvr::GvrApi> gvr_api_; |
| +}; |
| + |
| VrShellDelegate::VrShellDelegate(JNIEnv* env, jobject obj) |
| : device_provider_(nullptr) { |
| j_vr_shell_delegate_.Reset(env, obj); |
| @@ -62,6 +88,26 @@ void VrShellDelegate::ExitWebVRPresent() { |
| Java_VrShellDelegate_exitWebVR(env, j_vr_shell_delegate_.obj()); |
| } |
| +device::GvrDelegate* VrShellDelegate::GetNonPresentingDelegate() { |
| + if (!non_presenting_delegate_) { |
| + JNIEnv* env = AttachCurrentThread(); |
| + jlong context = Java_VrShellDelegate_createNonPresentingNativeContext( |
| + env, j_vr_shell_delegate_.obj()); |
| + if (!context) |
| + return nullptr; |
| + |
| + non_presenting_delegate_.reset(new GvrNonPresentingDelegate(context)); |
| + } |
| + return non_presenting_delegate_.get(); |
| +} |
| + |
| +void VrShellDelegate::DestroyNonPresentingDelegate() { |
| + non_presenting_delegate_.reset(nullptr); |
| + JNIEnv* env = AttachCurrentThread(); |
| + Java_VrShellDelegate_shutdownNonPresentingNativeContext( |
| + env, j_vr_shell_delegate_.obj()); |
| +} |
| + |
| void VrShellDelegate::OnVrShellReady(VrShell* vr_shell) { |
| if (device_provider_) |
| device_provider_->OnGvrDelegateReady(vr_shell); |