| Index: remoting/client/jni/jni_gl_display_handler.cc
|
| diff --git a/remoting/client/jni/jni_gl_display_handler.cc b/remoting/client/jni/jni_gl_display_handler.cc
|
| index 42b2676db8c4a4453883c0ceb9d9f9d1cb1b74da..85c0641e79384e73e8776fcb1caf67fcd38e4d66 100644
|
| --- a/remoting/client/jni/jni_gl_display_handler.cc
|
| +++ b/remoting/client/jni/jni_gl_display_handler.cc
|
| @@ -13,6 +13,7 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "jni/GlDisplay_jni.h"
|
| #include "remoting/client/cursor_shape_stub_proxy.h"
|
| +#include "remoting/client/display/gl_canvas.h"
|
| #include "remoting/client/dual_buffer_frame_consumer.h"
|
| #include "remoting/client/jni/chromoting_jni_runtime.h"
|
| #include "remoting/client/jni/egl_thread_context.h"
|
| @@ -62,7 +63,7 @@ class JniGlDisplayHandler::Core : public protocol::CursorShapeStub,
|
|
|
| ANativeWindow* window_ = nullptr;
|
| std::unique_ptr<EglThreadContext> egl_context_;
|
| - GlRenderer renderer_;
|
| + std::unique_ptr<GlRenderer> renderer_;
|
|
|
| // Used on display thread.
|
| base::WeakPtr<Core> weak_ptr_;
|
| @@ -74,12 +75,13 @@ class JniGlDisplayHandler::Core : public protocol::CursorShapeStub,
|
| JniGlDisplayHandler::Core::Core(ChromotingJniRuntime* runtime,
|
| base::WeakPtr<JniGlDisplayHandler> shell)
|
| : runtime_(runtime), shell_(shell), weak_factory_(this) {
|
| + renderer_ = GlRenderer::CreateGlRendererWithDesktop();
|
| weak_ptr_ = weak_factory_.GetWeakPtr();
|
| - renderer_.SetDelegate(weak_ptr_);
|
| + renderer_->SetDelegate(weak_ptr_);
|
| owned_frame_consumer_.reset(new DualBufferFrameConsumer(
|
| - base::Bind(&GlRenderer::OnFrameReceived, renderer_.GetWeakPtr()),
|
| - runtime_->display_task_runner(),
|
| - protocol::FrameConsumer::PixelFormat::FORMAT_RGBA));
|
| + base::Bind(&GlRenderer::OnFrameReceived, renderer_->GetWeakPtr()),
|
| + runtime_->display_task_runner(),
|
| + protocol::FrameConsumer::PixelFormat::FORMAT_RGBA));
|
| frame_consumer_ = owned_frame_consumer_->GetWeakPtr();
|
| }
|
|
|
| @@ -107,7 +109,7 @@ void JniGlDisplayHandler::Core::OnSizeChanged(int width, int height) {
|
| void JniGlDisplayHandler::Core::SetCursorShape(
|
| const protocol::CursorShapeInfo& cursor_shape) {
|
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
|
| - renderer_.OnCursorShapeChanged(cursor_shape);
|
| + renderer_->OnCursorShapeChanged(cursor_shape);
|
| }
|
|
|
| std::unique_ptr<protocol::FrameConsumer>
|
| @@ -121,12 +123,15 @@ void JniGlDisplayHandler::Core::SurfaceCreated(
|
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
|
| DCHECK(!egl_context_);
|
| DCHECK(!window_);
|
| - renderer_.RequestCanvasSize();
|
| + renderer_->RequestCanvasSize();
|
| window_ = ANativeWindow_fromSurface(base::android::AttachCurrentThread(),
|
| surface.obj());
|
| egl_context_.reset(new EglThreadContext());
|
| egl_context_->BindToWindow(window_);
|
| - renderer_.OnSurfaceCreated(static_cast<int>(egl_context_->client_version()));
|
| +
|
| + renderer_->OnSurfaceCreated(base::MakeUnique<GlCanvas>(
|
| + static_cast<int>(egl_context_->client_version())));
|
| +
|
| runtime_->network_task_runner()->PostTask(
|
| FROM_HERE, base::Bind(&DualBufferFrameConsumer::RequestFullDesktopFrame,
|
| frame_consumer_));
|
| @@ -134,14 +139,14 @@ void JniGlDisplayHandler::Core::SurfaceCreated(
|
|
|
| void JniGlDisplayHandler::Core::SurfaceChanged(int width, int height) {
|
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
|
| - renderer_.OnSurfaceChanged(width, height);
|
| + renderer_->OnSurfaceChanged(width, height);
|
| }
|
|
|
| void JniGlDisplayHandler::Core::SurfaceDestroyed() {
|
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
|
| DCHECK(egl_context_);
|
| DCHECK(window_);
|
| - renderer_.OnSurfaceDestroyed();
|
| + renderer_->OnSurfaceDestroyed();
|
| egl_context_.reset();
|
| ANativeWindow_release(window_);
|
| window_ = nullptr;
|
| @@ -150,24 +155,24 @@ void JniGlDisplayHandler::Core::SurfaceDestroyed() {
|
| void JniGlDisplayHandler::Core::SetTransformation(
|
| const std::array<float, 9>& matrix) {
|
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
|
| - renderer_.OnPixelTransformationChanged(matrix);
|
| + renderer_->OnPixelTransformationChanged(matrix);
|
| }
|
|
|
| void JniGlDisplayHandler::Core::MoveCursor(float x, float y) {
|
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
|
| - renderer_.OnCursorMoved(x, y);
|
| + renderer_->OnCursorMoved(x, y);
|
| }
|
|
|
| void JniGlDisplayHandler::Core::SetCursorVisibility(bool visible) {
|
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
|
| - renderer_.OnCursorVisibilityChanged(visible);
|
| + renderer_->OnCursorVisibilityChanged(visible);
|
| }
|
|
|
| void JniGlDisplayHandler::Core::StartInputFeedback(float x,
|
| float y,
|
| float diameter) {
|
| DCHECK(runtime_->display_task_runner()->BelongsToCurrentThread());
|
| - renderer_.OnCursorInputFeedback(x, y, diameter);
|
| + renderer_->OnCursorInputFeedback(x, y, diameter);
|
| }
|
|
|
| base::WeakPtr<JniGlDisplayHandler::Core>
|
|
|