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

Side by Side Diff: remoting/client/gl_renderer.cc

Issue 2555803002: Adding the iOS app and integration example with GlRenderer. (Closed)
Patch Set: Adjusting how gl_renderer draws layers and added a demo app for CRD iOS. Created 3 years, 12 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/client/gl_renderer.h" 5 #include "remoting/client/gl_renderer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "remoting/client/gl_canvas.h" 10 #include "remoting/client/gl_canvas.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 // Set the background clear color to bright green for debugging purposes. 96 // Set the background clear color to bright green for debugging purposes.
97 glClearColor(0.0f, 1.0f, 0.0f, 1.0f); 97 glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
98 #else 98 #else
99 // Set the background clear color to black. 99 // Set the background clear color to black.
100 glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 100 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
101 #endif 101 #endif
102 canvas_.reset(new GlCanvas(gl_version)); 102 canvas_.reset(new GlCanvas(gl_version));
103 desktop_.SetCanvas(canvas_.get()); 103 desktop_.SetCanvas(canvas_.get());
104 cursor_.SetCanvas(canvas_.get()); 104 cursor_.SetCanvas(canvas_.get());
105 cursor_feedback_.SetCanvas(canvas_.get()); 105 cursor_feedback_.SetCanvas(canvas_.get());
106
107 for (std::vector<GlDrawable*>::const_iterator dii = drawables.begin();
Sergey Ulanov 2016/12/19 23:50:21 use range loop with auto: for (auto& drawable :
108 dii != drawables.end(); dii++) {
109 (*dii)->SetCanvas(canvas_.get());
110 }
106 } 111 }
107 112
108 void GlRenderer::OnSurfaceChanged(int view_width, int view_height) { 113 void GlRenderer::OnSurfaceChanged(int view_width, int view_height) {
109 DCHECK(thread_checker_.CalledOnValidThread()); 114 DCHECK(thread_checker_.CalledOnValidThread());
110 if (!canvas_) { 115 if (!canvas_) {
111 LOG(WARNING) << "Trying to set the view size when the canvas is not ready."; 116 LOG(WARNING) << "Trying to set the view size when the canvas is not ready.";
112 return; 117 return;
113 } 118 }
114 canvas_->SetViewSize(view_width, view_height); 119 canvas_->SetViewSize(view_width, view_height);
115 RequestRender(); 120 RequestRender();
116 } 121 }
117 122
118 void GlRenderer::OnSurfaceDestroyed() { 123 void GlRenderer::OnSurfaceDestroyed() {
119 DCHECK(thread_checker_.CalledOnValidThread()); 124 DCHECK(thread_checker_.CalledOnValidThread());
120 cursor_feedback_.SetCanvas(nullptr); 125 cursor_feedback_.SetCanvas(nullptr);
121 cursor_.SetCanvas(nullptr); 126 cursor_.SetCanvas(nullptr);
122 desktop_.SetCanvas(nullptr); 127 desktop_.SetCanvas(nullptr);
128 for (std::vector<GlDrawable*>::const_iterator dii = drawables.begin();
Sergey Ulanov 2016/12/19 23:50:21 for (auto& drawable : drawables)
129 dii != drawables.end(); dii++) {
130 (*dii)->SetCanvas(nullptr);
131 }
123 canvas_.reset(); 132 canvas_.reset();
124 } 133 }
125 134
126 base::WeakPtr<GlRenderer> GlRenderer::GetWeakPtr() { 135 base::WeakPtr<GlRenderer> GlRenderer::GetWeakPtr() {
127 return weak_ptr_; 136 return weak_ptr_;
128 } 137 }
129 138
130 void GlRenderer::RequestRender() { 139 void GlRenderer::RequestRender() {
131 DCHECK(thread_checker_.CalledOnValidThread()); 140 DCHECK(thread_checker_.CalledOnValidThread());
132 if (render_scheduled_) { 141 if (render_scheduled_) {
133 return; 142 return;
134 } 143 }
135 base::ThreadTaskRunnerHandle::Get()->PostTask( 144 base::ThreadTaskRunnerHandle::Get()->PostTask(
136 FROM_HERE, base::Bind(&GlRenderer::OnRender, weak_ptr_)); 145 FROM_HERE, base::Bind(&GlRenderer::OnRender, weak_ptr_));
137 render_scheduled_ = true; 146 render_scheduled_ = true;
138 } 147 }
139 148
149 void GlRenderer::AddDrawable(GlDrawable* d) {
Sergey Ulanov 2016/12/19 23:50:21 s/d/drawable
150 d->SetCanvas(canvas_.get());
151 drawables.push_back(d);
152 }
153
140 void GlRenderer::OnRender() { 154 void GlRenderer::OnRender() {
141 DCHECK(thread_checker_.CalledOnValidThread()); 155 DCHECK(thread_checker_.CalledOnValidThread());
142 render_scheduled_ = false; 156 render_scheduled_ = false;
143 if (!delegate_ || !delegate_->CanRenderFrame()) { 157 if (!delegate_ || !delegate_->CanRenderFrame()) {
144 return; 158 return;
145 } 159 }
146 160
147 if (canvas_) { 161 if (canvas_) {
148 glClear(GL_COLOR_BUFFER_BIT); 162 glClear(GL_COLOR_BUFFER_BIT);
149 163
150 // Layers will be drawn from bottom to top. 164 // Layers will be drawn from bottom to top.
151 desktop_.Draw(); 165 desktop_.Draw();
152 166
153 // |cursor_feedback_| should be drawn before |cursor_| so that the cursor 167 // |cursor_feedback_| should be drawn before |cursor_| so that the cursor
154 // won't be covered by the feedback animation. 168 // won't be covered by the feedback animation.
155 if (cursor_feedback_.Draw()) { 169 if (cursor_feedback_.Draw()) {
156 RequestRender(); 170 RequestRender();
157 } 171 }
158 172
159 cursor_.Draw(); 173 cursor_.Draw();
174
175 for (std::vector<GlDrawable*>::const_iterator dii = drawables.begin();
Sergey Ulanov 2016/12/19 23:50:21 for (auto& drawable : drawables)
176 dii != drawables.end(); dii++) {
177 (*dii)->Draw();
178 }
160 } 179 }
161 180
162 delegate_->OnFrameRendered(); 181 delegate_->OnFrameRendered();
163 182
164 while (!pending_done_callbacks_.empty()) { 183 while (!pending_done_callbacks_.empty()) {
165 pending_done_callbacks_.front().Run(); 184 pending_done_callbacks_.front().Run();
166 pending_done_callbacks_.pop(); 185 pending_done_callbacks_.pop();
167 } 186 }
168 } 187 }
169 188
170 } // namespace remoting 189 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698