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

Side by Side Diff: cc/output/software_renderer.cc

Issue 18432002: Blend TextureLayer background-color at draw time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: implemented software renderer Created 7 years, 5 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 | « cc/output/shader.cc ('k') | cc/quads/draw_quad_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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "cc/output/software_renderer.h" 5 #include "cc/output/software_renderer.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "cc/base/math_util.h" 8 #include "cc/base/math_util.h"
9 #include "cc/output/compositor_frame.h" 9 #include "cc/output/compositor_frame.h"
10 #include "cc/output/compositor_frame_ack.h" 10 #include "cc/output/compositor_frame_ack.h"
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 345
346 // TODO(skaslev): Add support for non-premultiplied alpha. 346 // TODO(skaslev): Add support for non-premultiplied alpha.
347 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_, 347 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_,
348 quad->resource_id); 348 quad->resource_id);
349 const SkBitmap* bitmap = lock.sk_bitmap(); 349 const SkBitmap* bitmap = lock.sk_bitmap();
350 gfx::RectF uv_rect = gfx::ScaleRect(gfx::BoundingRect(quad->uv_top_left, 350 gfx::RectF uv_rect = gfx::ScaleRect(gfx::BoundingRect(quad->uv_top_left,
351 quad->uv_bottom_right), 351 quad->uv_bottom_right),
352 bitmap->width(), 352 bitmap->width(),
353 bitmap->height()); 353 bitmap->height());
354 SkRect sk_uv_rect = gfx::RectFToSkRect(uv_rect); 354 SkRect sk_uv_rect = gfx::RectFToSkRect(uv_rect);
355 SkRect quad_rect = gfx::RectFToSkRect(QuadVertexRect());
356
355 if (quad->flipped) 357 if (quad->flipped)
356 current_canvas_->scale(1, -1); 358 current_canvas_->scale(1, -1);
357 current_canvas_->drawBitmapRectToRect(*bitmap, &sk_uv_rect, 359
358 gfx::RectFToSkRect(QuadVertexRect()), 360 bool blend_background = (SkColorGetA(quad->background_color) != 0) &&
361 !bitmap->isOpaque();
362 bool needs_layer = blend_background && (current_paint_.getAlpha() != 0xFF);
alokp 2013/07/09 00:08:06 reed@: Is there a paint mode in skia that will avo
363 if (needs_layer) {
364 current_canvas_->saveLayerAlpha(&quad_rect, current_paint_.getAlpha());
365 current_paint_.setAlpha(0xFF);
366 }
367 if (blend_background) {
368 SkPaint background_paint;
369 background_paint.setColor(quad->background_color);
370 current_canvas_->drawRect(quad_rect, background_paint);
371 }
372
373 current_canvas_->drawBitmapRectToRect(*bitmap,
374 &sk_uv_rect,
375 quad_rect,
359 &current_paint_); 376 &current_paint_);
377
378 if (needs_layer)
379 current_canvas_->restore();
360 } 380 }
361 381
362 void SoftwareRenderer::DrawTileQuad(const DrawingFrame* frame, 382 void SoftwareRenderer::DrawTileQuad(const DrawingFrame* frame,
363 const TileDrawQuad* quad) { 383 const TileDrawQuad* quad) {
364 DCHECK(!output_surface_->ForcedDrawToSoftwareDevice()); 384 DCHECK(!output_surface_->ForcedDrawToSoftwareDevice());
365 DCHECK(IsSoftwareResource(quad->resource_id)); 385 DCHECK(IsSoftwareResource(quad->resource_id));
366 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_, 386 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_,
367 quad->resource_id); 387 quad->resource_id);
368 388
369 SkRect uv_rect = gfx::RectFToSkRect(quad->tex_coord_rect); 389 SkRect uv_rect = gfx::RectFToSkRect(quad->tex_coord_rect);
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 visible_ = visible; 508 visible_ = visible;
489 } 509 }
490 510
491 void SoftwareRenderer::SetDiscardBackBufferWhenNotVisible(bool discard) { 511 void SoftwareRenderer::SetDiscardBackBufferWhenNotVisible(bool discard) {
492 // TODO(piman, skaslev): Can we release the backbuffer? We don't currently 512 // TODO(piman, skaslev): Can we release the backbuffer? We don't currently
493 // receive memory policy yet anyway. 513 // receive memory policy yet anyway.
494 NOTIMPLEMENTED(); 514 NOTIMPLEMENTED();
495 } 515 }
496 516
497 } // namespace cc 517 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/shader.cc ('k') | cc/quads/draw_quad_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698