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 f931b2d7a787195537d5f243747cf12b08942cb0..036fe62077d3e44e60f67fddd0d691008d0bdbf1 100644 |
--- a/chrome/browser/android/vr_shell/vr_shell.cc |
+++ b/chrome/browser/android/vr_shell/vr_shell.cc |
@@ -4,6 +4,9 @@ |
#include "chrome/browser/android/vr_shell/vr_shell.h" |
+#include <android/native_window.h> |
+#include <android/native_window_jni.h> |
+ |
#include "base/metrics/histogram_macros.h" |
#include "base/threading/platform_thread.h" |
#include "base/threading/thread.h" |
@@ -48,14 +51,16 @@ class GLThread : public base::Thread { |
const base::WeakPtr<VrInputManager>& ui_input_manager, |
scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner, |
gvr_context* gvr_api, |
- bool initially_web_vr) |
+ bool initially_web_vr, |
+ bool reprojected_rendering) |
: base::Thread("VrShellGL"), |
weak_vr_shell_(weak_vr_shell), |
content_input_manager_(content_input_manager), |
ui_input_manager_(ui_input_manager), |
main_thread_task_runner_(std::move(main_thread_task_runner)), |
gvr_api_(gvr_api), |
- initially_web_vr_(initially_web_vr) {} |
+ initially_web_vr_(initially_web_vr), |
+ reprojected_rendering_(reprojected_rendering) {} |
~GLThread() override { |
Stop(); |
@@ -70,11 +75,10 @@ class GLThread : public base::Thread { |
std::move(ui_input_manager_), |
std::move(main_thread_task_runner_), |
gvr_api_, |
- initially_web_vr_)); |
+ initially_web_vr_, |
+ reprojected_rendering_)); |
weak_vr_shell_gl_ = vr_shell_gl_->GetWeakPtr(); |
- if (!vr_shell_gl_->Initialize()) { |
- vr_shell_gl_.reset(); |
- } |
+ vr_shell_gl_->Initialize(); |
} |
void CleanUp() override { |
vr_shell_gl_.reset(); |
@@ -91,6 +95,7 @@ class GLThread : public base::Thread { |
scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; |
gvr_context* gvr_api_; |
bool initially_web_vr_; |
+ bool reprojected_rendering_; |
}; |
} // namespace |
@@ -103,7 +108,8 @@ VrShell::VrShell(JNIEnv* env, |
ui::WindowAndroid* ui_window, |
bool for_web_vr, |
VrShellDelegate* delegate, |
- gvr_context* gvr_api) |
+ gvr_context* gvr_api, |
+ bool reprojected_rendering) |
: WebContentsObserver(ui_contents), |
main_contents_(main_contents), |
content_compositor_(new VrCompositor(content_window, false)), |
@@ -112,6 +118,7 @@ VrShell::VrShell(JNIEnv* env, |
delegate_(delegate), |
metrics_helper_(new VrMetricsHelper(main_contents_)), |
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
+ reprojected_rendering_(reprojected_rendering), |
weak_ptr_factory_(this) { |
DCHECK(g_instance == nullptr); |
g_instance = this; |
@@ -127,8 +134,8 @@ VrShell::VrShell(JNIEnv* env, |
content_input_manager_->GetWeakPtr(), |
ui_input_manager_->GetWeakPtr(), |
main_thread_task_runner_, |
- gvr_api, |
- for_web_vr)); |
+ gvr_api, for_web_vr, |
bshe
2017/01/04 16:40:23
nit: one parameter per line
mthiesse
2017/01/04 16:58:09
Done.
|
+ reprojected_rendering_)); |
base::Thread::Options options(base::MessageLoop::TYPE_DEFAULT, 0); |
options.priority = base::ThreadPriority::DISPLAY; |
@@ -215,6 +222,18 @@ void VrShell::OnResume(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
SetShowingOverscrollGlow(false); |
} |
+void VrShell::SetSurface(JNIEnv* env, |
+ const JavaParamRef<jobject>& obj, |
+ const JavaParamRef<jobject>& surface) { |
+ CHECK(!reprojected_rendering_); |
+ GLThread* thread = static_cast<GLThread*>(gl_thread_.get()); |
+ gfx::AcceleratedWidget window = |
+ ANativeWindow_fromSurface(base::android::AttachCurrentThread(), surface); |
+ PostToGlThreadWhenReady(base::Bind(&VrShellGl::InitializeGl, |
+ thread->GetVrShellGl(), |
+ base::Unretained(window))); |
+} |
+ |
void VrShell::SetShowingOverscrollGlow(bool showing_glow) { |
main_contents_->GetRenderWidgetHostView()->SetShowingOverscrollGlow( |
showing_glow); |
@@ -453,14 +472,14 @@ jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj, |
const JavaParamRef<jobject>& ui_web_contents, |
jlong ui_window_android, jboolean for_web_vr, |
const base::android::JavaParamRef<jobject>& delegate, |
- jlong gvr_api) { |
+ jlong gvr_api, jboolean reprojected_rendering) { |
return reinterpret_cast<intptr_t>(new VrShell( |
env, obj, content::WebContents::FromJavaWebContents(content_web_contents), |
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), |
- reinterpret_cast<gvr_context*>(gvr_api))); |
+ reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering)); |
} |
} // namespace vr_shell |