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

Side by Side Diff: ui/gfx/compositor/compositor_gl.cc

Issue 8307001: Enable accelerated compositing of web pages when using webkit compositor (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: rebase Created 9 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « ui/gfx/compositor/compositor_gl.h ('k') | ui/gfx/compositor/layer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "ui/gfx/compositor/compositor_gl.h" 5 #include "ui/gfx/compositor/compositor_gl.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 // Store locations of program inputs. 201 // Store locations of program inputs.
202 a_pos_loc_ = glGetAttribLocation(program_, "a_position"); 202 a_pos_loc_ = glGetAttribLocation(program_, "a_position");
203 a_tex_loc_ = glGetAttribLocation(program_, "a_texCoord"); 203 a_tex_loc_ = glGetAttribLocation(program_, "a_texCoord");
204 u_alpha_loc_ = glGetUniformLocation(program_, "u_alpha"); 204 u_alpha_loc_ = glGetUniformLocation(program_, "u_alpha");
205 u_tex_loc_ = glGetUniformLocation(program_, "u_tex"); 205 u_tex_loc_ = glGetUniformLocation(program_, "u_tex");
206 u_mat_loc_ = glGetUniformLocation(program_, "u_matViewProjection"); 206 u_mat_loc_ = glGetUniformLocation(program_, "u_matViewProjection");
207 207
208 return true; 208 return true;
209 } 209 }
210 210
211 SharedResources::SharedResources() : initialized_(false) { 211 SharedResourcesGL::SharedResourcesGL() : initialized_(false) {
212 } 212 }
213 213
214 214
215 SharedResources::~SharedResources() { 215 SharedResourcesGL::~SharedResourcesGL() {
216 } 216 }
217 217
218 // static 218 // static
219 SharedResources* SharedResources::GetInstance() { 219 SharedResourcesGL* SharedResourcesGL::GetInstance() {
220 // We use LeakySingletonTraits so that we don't race with 220 // We use LeakySingletonTraits so that we don't race with
221 // the tear down of the gl_bindings. 221 // the tear down of the gl_bindings.
222 SharedResources* instance = Singleton<SharedResources, 222 SharedResourcesGL* instance = Singleton<SharedResourcesGL,
223 LeakySingletonTraits<SharedResources> >::get(); 223 LeakySingletonTraits<SharedResourcesGL> >::get();
224 if (instance->Initialize()) { 224 if (instance->Initialize()) {
225 return instance; 225 return instance;
226 } else { 226 } else {
227 instance->Destroy(); 227 instance->Destroy();
228 return NULL; 228 return NULL;
229 } 229 }
230 } 230 }
231 231
232 bool SharedResources::Initialize() { 232 bool SharedResourcesGL::Initialize() {
233 if (initialized_) 233 if (initialized_)
234 return true; 234 return true;
235 235
236 { 236 {
237 // The following line of code exists soley to disable IO restrictions 237 // The following line of code exists soley to disable IO restrictions
238 // on this thread long enough to perform the GL bindings. 238 // on this thread long enough to perform the GL bindings.
239 // TODO(wjmaclean) Remove this when GL initialisation cleaned up. 239 // TODO(wjmaclean) Remove this when GL initialisation cleaned up.
240 base::ThreadRestrictions::ScopedAllowIO allow_io; 240 base::ThreadRestrictions::ScopedAllowIO allow_io;
241 if (!gfx::GLSurface::InitializeOneOff() || 241 if (!gfx::GLSurface::InitializeOneOff() ||
242 gfx::GetGLImplementation() == gfx::kGLImplementationNone) { 242 gfx::GetGLImplementation() == gfx::kGLImplementationNone) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 return false; 279 return false;
280 } 280 }
281 281
282 program_no_swizzle_.swap(temp_program_no_swizzle); 282 program_no_swizzle_.swap(temp_program_no_swizzle);
283 program_swizzle_.swap(temp_program_swizzle); 283 program_swizzle_.swap(temp_program_swizzle);
284 284
285 initialized_ = true; 285 initialized_ = true;
286 return true; 286 return true;
287 } 287 }
288 288
289 void SharedResources::Destroy() { 289 void SharedResourcesGL::Destroy() {
290 program_swizzle_.reset(); 290 program_swizzle_.reset();
291 program_no_swizzle_.reset(); 291 program_no_swizzle_.reset();
292 292
293 context_ = NULL; 293 context_ = NULL;
294 surface_ = NULL; 294 surface_ = NULL;
295 295
296 initialized_ = false; 296 initialized_ = false;
297 } 297 }
298 298
299 bool SharedResources::MakeSharedContextCurrent() { 299 bool SharedResourcesGL::MakeSharedContextCurrent() {
300 if (!initialized_) 300 if (!initialized_)
301 return false; 301 return false;
302 else 302 else
303 return context_->MakeCurrent(surface_.get()); 303 return context_->MakeCurrent(surface_.get());
304 } 304 }
305 305
306 scoped_refptr<gfx::GLContext> SharedResources::CreateContext( 306 scoped_refptr<gfx::GLContext> SharedResourcesGL::CreateContext(
307 gfx::GLSurface* surface) { 307 gfx::GLSurface* surface) {
308 if (initialized_) 308 if (initialized_)
309 return gfx::GLContext::CreateGLContext( 309 return gfx::GLContext::CreateGLContext(
310 context_->share_group(), 310 context_->share_group(),
311 surface, 311 surface,
312 gfx::PreferIntegratedGpu); 312 gfx::PreferIntegratedGpu);
313 else 313 else
314 return NULL; 314 return NULL;
315 } 315 }
316 316
317 TextureGL::TextureGL() : texture_id_(0) { 317 TextureGL::TextureGL() : texture_id_(0) {
318 } 318 }
319 319
320 TextureGL::TextureGL(const gfx::Size& size) : texture_id_(0), size_(size) { 320 TextureGL::TextureGL(const gfx::Size& size) : texture_id_(0), size_(size) {
321 } 321 }
322 322
323 TextureGL::~TextureGL() { 323 TextureGL::~TextureGL() {
324 if (texture_id_) { 324 if (texture_id_) {
325 SharedResources* instance = SharedResources::GetInstance(); 325 SharedResourcesGL* instance = SharedResourcesGL::GetInstance();
326 DCHECK(instance); 326 DCHECK(instance);
327 instance->MakeSharedContextCurrent(); 327 instance->MakeSharedContextCurrent();
328 glDeleteTextures(1, &texture_id_); 328 glDeleteTextures(1, &texture_id_);
329 } 329 }
330 } 330 }
331 331
332 void TextureGL::SetCanvas(const SkCanvas& canvas, 332 void TextureGL::SetCanvas(const SkCanvas& canvas,
333 const gfx::Point& origin, 333 const gfx::Point& origin,
334 const gfx::Size& overall_size) { 334 const gfx::Size& overall_size) {
335 const SkBitmap& bitmap = canvas.getDevice()->accessBitmap(false); 335 const SkBitmap& bitmap = canvas.getDevice()->accessBitmap(false);
(...skipping 27 matching lines...) Expand all
363 } else { // Uploading partial texture. 363 } else { // Uploading partial texture.
364 glBindTexture(GL_TEXTURE_2D, texture_id_); 364 glBindTexture(GL_TEXTURE_2D, texture_id_);
365 glTexSubImage2D(GL_TEXTURE_2D, 0, origin.x(), origin.y(), 365 glTexSubImage2D(GL_TEXTURE_2D, 0, origin.x(), origin.y(),
366 bitmap.width(), bitmap.height(), 366 bitmap.width(), bitmap.height(),
367 GL_RGBA, GL_UNSIGNED_BYTE, pixels); 367 GL_RGBA, GL_UNSIGNED_BYTE, pixels);
368 } 368 }
369 } 369 }
370 370
371 void TextureGL::Draw(const ui::TextureDrawParams& params, 371 void TextureGL::Draw(const ui::TextureDrawParams& params,
372 const gfx::Rect& clip_bounds_in_texture) { 372 const gfx::Rect& clip_bounds_in_texture) {
373 SharedResources* instance = SharedResources::GetInstance(); 373 SharedResourcesGL* instance = SharedResourcesGL::GetInstance();
374 DCHECK(instance); 374 DCHECK(instance);
375 DrawInternal(*instance->program_swizzle(), 375 DrawInternal(*instance->program_swizzle(),
376 params, 376 params,
377 clip_bounds_in_texture); 377 clip_bounds_in_texture);
378 } 378 }
379 379
380 void TextureGL::DrawInternal(const ui::TextureProgramGL& program, 380 void TextureGL::DrawInternal(const ui::TextureProgramGL& program,
381 const ui::TextureDrawParams& params, 381 const ui::TextureDrawParams& params,
382 const gfx::Rect& clip_bounds_in_texture) { 382 const gfx::Rect& clip_bounds_in_texture) {
383 // Clip clip_bounds_in_texture to size of texture. 383 // Clip clip_bounds_in_texture to size of texture.
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 479
480 glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 480 glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
481 } 481 }
482 482
483 CompositorGL::CompositorGL(CompositorDelegate* delegate, 483 CompositorGL::CompositorGL(CompositorDelegate* delegate,
484 gfx::AcceleratedWidget widget, 484 gfx::AcceleratedWidget widget,
485 const gfx::Size& size) 485 const gfx::Size& size)
486 : Compositor(delegate, size), 486 : Compositor(delegate, size),
487 started_(false) { 487 started_(false) {
488 gl_surface_ = gfx::GLSurface::CreateViewGLSurface(false, widget); 488 gl_surface_ = gfx::GLSurface::CreateViewGLSurface(false, widget);
489 gl_context_ = SharedResources::GetInstance()-> 489 gl_context_ = SharedResourcesGL::GetInstance()->
490 CreateContext(gl_surface_.get()); 490 CreateContext(gl_surface_.get());
491 gl_context_->MakeCurrent(gl_surface_.get()); 491 gl_context_->MakeCurrent(gl_surface_.get());
492 gl_context_->SetSwapInterval(1); 492 gl_context_->SetSwapInterval(1);
493 glColorMask(true, true, true, true); 493 glColorMask(true, true, true, true);
494 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 494 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
495 } 495 }
496 496
497 CompositorGL::~CompositorGL() { 497 CompositorGL::~CompositorGL() {
498 gl_context_ = NULL; 498 gl_context_ = NULL;
499 } 499 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 } 537 }
538 538
539 void CompositorGL::Blur(const gfx::Rect& bounds) { 539 void CompositorGL::Blur(const gfx::Rect& bounds) {
540 NOTIMPLEMENTED(); 540 NOTIMPLEMENTED();
541 } 541 }
542 542
543 // static 543 // static
544 Compositor* Compositor::Create(CompositorDelegate* owner, 544 Compositor* Compositor::Create(CompositorDelegate* owner,
545 gfx::AcceleratedWidget widget, 545 gfx::AcceleratedWidget widget,
546 const gfx::Size& size) { 546 const gfx::Size& size) {
547 if (SharedResources::GetInstance() == NULL) 547 if (SharedResourcesGL::GetInstance() == NULL)
548 return NULL; 548 return NULL;
549 else 549 else
550 return new CompositorGL(owner, widget, size); 550 return new CompositorGL(owner, widget, size);
551 } 551 }
552 552
553 } // namespace ui 553 } // namespace ui
OLDNEW
« no previous file with comments | « ui/gfx/compositor/compositor_gl.h ('k') | ui/gfx/compositor/layer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698