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

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

Issue 8561016: Adds a bounds parameter to ui::Compositor::ReadPixels (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nicer revision Created 9 years, 1 month 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_unittest.cc » ('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/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 if (debug_overdraw) 551 if (debug_overdraw)
552 glBlendFunc(GL_ONE, GL_ONE); 552 glBlendFunc(GL_ONE, GL_ONE);
553 else 553 else
554 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 554 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
555 } 555 }
556 556
557 CompositorGL::~CompositorGL() { 557 CompositorGL::~CompositorGL() {
558 gl_context_ = NULL; 558 gl_context_ = NULL;
559 } 559 }
560 560
561 bool CompositorGL::ReadPixels(SkBitmap* bitmap) { 561 bool CompositorGL::ReadPixels(SkBitmap* bitmap, const gfx::Rect& bounds) {
562 MakeCurrent(); 562 MakeCurrent();
563 563
564 if (bounds.right() > size().width() || bounds.bottom() > size().height())
565 return false;
566
564 bitmap->setConfig(SkBitmap::kARGB_8888_Config, 567 bitmap->setConfig(SkBitmap::kARGB_8888_Config,
565 size().width(), 568 bounds.width(),
566 size().height()); 569 bounds.height());
567 bitmap->allocPixels(); 570 bitmap->allocPixels();
568 SkAutoLockPixels lock(*bitmap); 571 SkAutoLockPixels lock(*bitmap);
569 unsigned char* pixels = static_cast<unsigned char*>(bitmap->getPixels()); 572 unsigned char* pixels = static_cast<unsigned char*>(bitmap->getPixels());
570 573
571 // Check that it's a tight pixel packing 574 // Check that it's a tight pixel packing
572 DCHECK_EQ(bitmap->rowBytes(), 575 DCHECK_EQ(bitmap->rowBytes(),
573 SkBitmap::ComputeRowBytes(bitmap->config(), bitmap->width())); 576 SkBitmap::ComputeRowBytes(bitmap->config(), bitmap->width()));
574 577
575 GLint current_alignment = 0; 578 GLint current_alignment = 0;
576 glGetIntegerv(GL_PACK_ALIGNMENT, &current_alignment); 579 glGetIntegerv(GL_PACK_ALIGNMENT, &current_alignment);
577 glPixelStorei(GL_PACK_ALIGNMENT, 4); 580 glPixelStorei(GL_PACK_ALIGNMENT, 4);
578 glReadPixels(0, 581 glReadPixels(bounds.x(),
579 0, 582 size().height() - bounds.y() - bounds.height(),
Ian Vollick 2011/11/18 18:13:45 I think it would be helpful to have a comment like
580 size().width(), 583 bounds.width(),
581 size().height(), 584 bounds.height(),
582 GL_RGBA, 585 GL_RGBA,
583 GL_UNSIGNED_BYTE, 586 GL_UNSIGNED_BYTE,
584 pixels); 587 pixels);
585 glPixelStorei(GL_PACK_ALIGNMENT, current_alignment); 588 glPixelStorei(GL_PACK_ALIGNMENT, current_alignment);
586 589
587 SwizzleRGBAToBGRAAndFlip(pixels, size()); 590 SwizzleRGBAToBGRAAndFlip(pixels, bounds.size());
588 return true; 591 return true;
589 } 592 }
590 593
591 void CompositorGL::MakeCurrent() { 594 void CompositorGL::MakeCurrent() {
592 gl_context_->MakeCurrent(gl_surface_.get()); 595 gl_context_->MakeCurrent(gl_surface_.get());
593 } 596 }
594 597
595 void CompositorGL::OnWidgetSizeChanged() { 598 void CompositorGL::OnWidgetSizeChanged() {
596 } 599 }
597 600
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 Compositor* Compositor::Create(CompositorDelegate* owner, 639 Compositor* Compositor::Create(CompositorDelegate* owner,
637 gfx::AcceleratedWidget widget, 640 gfx::AcceleratedWidget widget,
638 const gfx::Size& size) { 641 const gfx::Size& size) {
639 if (SharedResourcesGL::GetInstance() == NULL) 642 if (SharedResourcesGL::GetInstance() == NULL)
640 return NULL; 643 return NULL;
641 else 644 else
642 return new CompositorGL(owner, widget, size); 645 return new CompositorGL(owner, widget, size);
643 } 646 }
644 647
645 } // namespace ui 648 } // namespace ui
OLDNEW
« no previous file with comments | « ui/gfx/compositor/compositor_gl.h ('k') | ui/gfx/compositor/layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698