Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(296)

Unified Diff: remoting/client/display/gl_renderer.cc

Issue 2591363002: Adding drawable to CRD andorid and iOS gl rendering pipeline. (Closed)
Patch Set: More like GetZIndex. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/client/display/gl_renderer.h ('k') | remoting/client/display/gl_renderer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/client/display/gl_renderer.cc
diff --git a/remoting/client/display/gl_renderer.cc b/remoting/client/display/gl_renderer.cc
index c975e546637bb980502d9ba4b93944f68d0c6b52..8b2ee234a8dbae570d56f5e88bc5b4864c942e95 100644
--- a/remoting/client/display/gl_renderer.cc
+++ b/remoting/client/display/gl_renderer.cc
@@ -4,9 +4,12 @@
#include "remoting/client/display/gl_renderer.h"
+#include <algorithm>
+
#include "base/bind.h"
#include "base/logging.h"
#include "base/threading/thread_task_runner_handle.h"
+#include "remoting/client/display/drawable.h"
#include "remoting/client/display/gl_canvas.h"
#include "remoting/client/display/gl_math.h"
#include "remoting/client/display/gl_renderer_delegate.h"
@@ -15,14 +18,22 @@
namespace remoting {
+namespace {
+
+bool CompareDrawableZOrder(base::WeakPtr<Drawable> a,
+ base::WeakPtr<Drawable> b) {
+ return a->GetZIndex() < b->GetZIndex();
+}
+
+} // namespace
+
GlRenderer::GlRenderer() :
weak_factory_(this) {
weak_ptr_ = weak_factory_.GetWeakPtr();
thread_checker_.DetachFromThread();
}
-GlRenderer::~GlRenderer() {
-}
+GlRenderer::~GlRenderer() {}
void GlRenderer::SetDelegate(base::WeakPtr<GlRendererDelegate> delegate) {
DCHECK(!delegate_);
@@ -90,19 +101,12 @@ void GlRenderer::OnCursorShapeChanged(const protocol::CursorShapeInfo& shape) {
RequestRender();
}
-void GlRenderer::OnSurfaceCreated(int gl_version) {
+void GlRenderer::OnSurfaceCreated(std::unique_ptr<Canvas> canvas) {
DCHECK(thread_checker_.CalledOnValidThread());
-#ifndef NDEBUG
- // Set the background clear color to bright green for debugging purposes.
- glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
-#else
- // Set the background clear color to black.
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
-#endif
- canvas_.reset(new GlCanvas(gl_version));
- desktop_.SetCanvas(canvas_.get());
- cursor_.SetCanvas(canvas_.get());
- cursor_feedback_.SetCanvas(canvas_.get());
+ canvas_ = std::move(canvas);
+ for (auto& drawable : drawables_) {
+ drawable->SetCanvas(canvas_->GetWeakPtr());
+ }
}
void GlRenderer::OnSurfaceChanged(int view_width, int view_height) {
@@ -137,6 +141,12 @@ void GlRenderer::RequestRender() {
render_scheduled_ = true;
}
+void GlRenderer::AddDrawable(base::WeakPtr<Drawable> drawable) {
+ drawable->SetCanvas(canvas_ ? canvas_->GetWeakPtr() : nullptr);
+ drawables_.push_back(drawable);
+ std::sort(drawables_.begin(), drawables_.end(), CompareDrawableZOrder);
+}
+
void GlRenderer::OnRender() {
DCHECK(thread_checker_.CalledOnValidThread());
render_scheduled_ = false;
@@ -145,18 +155,13 @@ void GlRenderer::OnRender() {
}
if (canvas_) {
- glClear(GL_COLOR_BUFFER_BIT);
-
- // Layers will be drawn from bottom to top.
- desktop_.Draw();
-
- // |cursor_feedback_| should be drawn before |cursor_| so that the cursor
- // won't be covered by the feedback animation.
- if (cursor_feedback_.Draw()) {
- RequestRender();
+ canvas_->Clear();
+ // Draw each drawable in order.
+ for (auto& drawable : drawables_) {
+ if (drawable->Draw()) {
+ RequestRender();
+ }
}
-
- cursor_.Draw();
}
delegate_->OnFrameRendered();
@@ -167,4 +172,12 @@ void GlRenderer::OnRender() {
}
}
+std::unique_ptr<GlRenderer> GlRenderer::CreateGlRendererWithDesktop() {
+ std::unique_ptr<GlRenderer> renderer(new GlRenderer());
+ renderer->AddDrawable(renderer->desktop_.GetWeakPtr());
Yuwei 2017/01/12 23:23:17 Sorry that I haven't spied the bug here. The threa
joedow 2017/01/13 15:49:44 The thread checkers of the drawables will be initi
+ renderer->AddDrawable(renderer->cursor_.GetWeakPtr());
+ renderer->AddDrawable(renderer->cursor_feedback_.GetWeakPtr());
+ return renderer;
+}
+
} // namespace remoting
« no previous file with comments | « remoting/client/display/gl_renderer.h ('k') | remoting/client/display/gl_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698