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

Unified Diff: remoting/client/gl_renderer.cc

Issue 2591363002: Adding drawable to CRD andorid and iOS gl rendering pipeline. (Closed)
Patch Set: Minor cleanup of an unused const. Created 4 years 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
Index: remoting/client/gl_renderer.cc
diff --git a/remoting/client/gl_renderer.cc b/remoting/client/gl_renderer.cc
index 64ce7d31d537b0db9870ebe1a8a77bcb631153f5..c422f33a7a0bad0d7e82c32f3e51387b353770e9 100644
--- a/remoting/client/gl_renderer.cc
+++ b/remoting/client/gl_renderer.cc
@@ -17,13 +17,20 @@ namespace remoting {
GlRenderer::GlRenderer() :
weak_factory_(this) {
- weak_ptr_ = weak_factory_.GetWeakPtr();
thread_checker_.DetachFromThread();
}
GlRenderer::~GlRenderer() {
}
+GlRenderer* GlRenderer::CreateGlRendererWithDesktop() {
Yuwei 2016/12/21 23:41:59 I think it makes more sense to create a new class
nicholss 2017/01/09 18:50:24 I think that makes sense but not required for this
+ GlRenderer* renderer = new GlRenderer();
+ renderer->AddDrawable(renderer->desktop_.GetWeakPtr());
+ renderer->AddDrawable(renderer->cursor_.GetWeakPtr());
+ renderer->AddDrawable(renderer->cursor_feedback_.GetWeakPtr());
+ return renderer;
+}
+
void GlRenderer::SetDelegate(base::WeakPtr<GlRendererDelegate> delegate) {
DCHECK(!delegate_);
delegate_ = delegate;
@@ -48,24 +55,28 @@ void GlRenderer::OnPixelTransformationChanged(
RequestRender();
}
+// TODO(nicholss): This method seems like it should not be in this class.
void GlRenderer::OnCursorMoved(float x, float y) {
DCHECK(thread_checker_.CalledOnValidThread());
cursor_.SetCursorPosition(x, y);
RequestRender();
}
+// TODO(nicholss): This method seems like it should not be in this class.
void GlRenderer::OnCursorInputFeedback(float x, float y, float diameter) {
DCHECK(thread_checker_.CalledOnValidThread());
cursor_feedback_.StartAnimation(x, y, diameter);
RequestRender();
}
+// TODO(nicholss): This method seems like it should not be in this class.
void GlRenderer::OnCursorVisibilityChanged(bool visible) {
DCHECK(thread_checker_.CalledOnValidThread());
cursor_.SetCursorVisible(visible);
RequestRender();
}
+// TODO(nicholss): This method seems like it should not be in this class.
void GlRenderer::OnFrameReceived(std::unique_ptr<webrtc::DesktopFrame> frame,
const base::Closure& done) {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -84,6 +95,7 @@ void GlRenderer::OnFrameReceived(std::unique_ptr<webrtc::DesktopFrame> frame,
RequestRender();
}
+// TODO(nicholss): This method seems like it should not be in this class.
void GlRenderer::OnCursorShapeChanged(const protocol::CursorShapeInfo& shape) {
DCHECK(thread_checker_.CalledOnValidThread());
cursor_.SetCursorShape(shape);
@@ -92,17 +104,10 @@ void GlRenderer::OnCursorShapeChanged(const protocol::CursorShapeInfo& shape) {
void GlRenderer::OnSurfaceCreated(int gl_version) {
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_.reset(GlCanvas::CreateGlCanvas(gl_version));
+ for (auto& drawable : drawables_) {
+ drawable->SetCanvas(canvas_.get());
+ }
}
void GlRenderer::OnSurfaceChanged(int view_width, int view_height) {
@@ -117,14 +122,14 @@ void GlRenderer::OnSurfaceChanged(int view_width, int view_height) {
void GlRenderer::OnSurfaceDestroyed() {
DCHECK(thread_checker_.CalledOnValidThread());
- cursor_feedback_.SetCanvas(nullptr);
- cursor_.SetCanvas(nullptr);
- desktop_.SetCanvas(nullptr);
+ for (auto& drawable : drawables_) {
+ drawable->SetCanvas(nullptr);
+ }
canvas_.reset();
}
base::WeakPtr<GlRenderer> GlRenderer::GetWeakPtr() {
- return weak_ptr_;
+ return weak_factory_.GetWeakPtr();
Yuwei 2016/12/21 23:41:59 Why removing |weak_ptr_|? We used |weak_ptr_| sinc
nicholss 2016/12/22 16:21:41 Nothing in the documentation says this call is thr
Yuwei 2016/12/22 19:01:10 Yep, this is an undocumented bug("feature"?). See
joedow 2016/12/22 19:18:09 Thanks for pointing that out Yuwei! That is a goo
Sergey Ulanov 2016/12/27 21:00:19 weak ptrs get bound to a thread when they are dere
nicholss 2017/01/09 18:50:24 reverted;
}
void GlRenderer::RequestRender() {
@@ -133,32 +138,32 @@ void GlRenderer::RequestRender() {
return;
}
base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(&GlRenderer::OnRender, weak_ptr_));
+ FROM_HERE, base::Bind(&GlRenderer::OnRender, GetWeakPtr()));
render_scheduled_ = true;
}
+void GlRenderer::AddDrawable(base::WeakPtr<GlDrawable> drawable) {
+ drawable->SetCanvas(canvas_.get());
+ drawables_.push_back(drawable);
+ std::sort(drawables_.begin(), drawables_.end(),
+ drawable::SortDrawablesZOrder);
+}
+
void GlRenderer::OnRender() {
DCHECK(thread_checker_.CalledOnValidThread());
render_scheduled_ = false;
if (!delegate_ || !delegate_->CanRenderFrame()) {
return;
}
-
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();
joedow 2016/12/22 00:29:03 Can you break out of the loop once a drawable indi
nicholss 2016/12/22 16:21:41 No, request render means: next draw loop, I have s
Yuwei 2016/12/22 19:01:10 I think it worth it to add a comment about the ret
joedow 2016/12/22 19:18:09 Ah yeah, I misread that. As long as RequestRender
+ }
}
-
- cursor_.Draw();
}
-
delegate_->OnFrameRendered();
while (!pending_done_callbacks_.empty()) {

Powered by Google App Engine
This is Rietveld 408576698