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

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

Issue 2092913002: cc::SkiaRenderer hack prototype (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More generic resource provider funcs Created 4 years, 6 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
« no previous file with comments | « cc/output/skia_renderer.cc ('k') | cc/resources/resource_provider.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 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/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/trace_event/trace_event.h" 8 #include "base/trace_event/trace_event.h"
9 #include "cc/base/math_util.h" 9 #include "cc/base/math_util.h"
10 #include "cc/output/compositor_frame.h" 10 #include "cc/output/compositor_frame.h"
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 405 }
406 406
407 void SoftwareRenderer::DrawTextureQuad(const DrawingFrame* frame, 407 void SoftwareRenderer::DrawTextureQuad(const DrawingFrame* frame,
408 const TextureDrawQuad* quad) { 408 const TextureDrawQuad* quad) {
409 if (!IsSoftwareResource(quad->resource_id())) { 409 if (!IsSoftwareResource(quad->resource_id())) {
410 DrawUnsupportedQuad(frame, quad); 410 DrawUnsupportedQuad(frame, quad);
411 return; 411 return;
412 } 412 }
413 413
414 // TODO(skaslev): Add support for non-premultiplied alpha. 414 // TODO(skaslev): Add support for non-premultiplied alpha.
415 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_, 415 ResourceProvider::ScopedReadLockSkImage lock(resource_provider_,
416 quad->resource_id()); 416 quad->resource_id());
417 if (!lock.valid()) 417 if (!lock.valid())
418 return; 418 return;
419 const SkBitmap* bitmap = lock.sk_bitmap(); 419 const SkImage* image = lock.sk_image();
420 gfx::RectF uv_rect = gfx::ScaleRect(gfx::BoundingRect(quad->uv_top_left, 420 gfx::RectF uv_rect = gfx::ScaleRect(
421 quad->uv_bottom_right), 421 gfx::BoundingRect(quad->uv_top_left, quad->uv_bottom_right),
422 bitmap->width(), 422 image->width(), image->height());
423 bitmap->height());
424 gfx::RectF visible_uv_rect = MathUtil::ScaleRectProportional( 423 gfx::RectF visible_uv_rect = MathUtil::ScaleRectProportional(
425 uv_rect, gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect)); 424 uv_rect, gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect));
426 SkRect sk_uv_rect = gfx::RectFToSkRect(visible_uv_rect); 425 SkRect sk_uv_rect = gfx::RectFToSkRect(visible_uv_rect);
427 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional( 426 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional(
428 QuadVertexRect(), gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect)); 427 QuadVertexRect(), gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect));
429 SkRect quad_rect = gfx::RectFToSkRect(visible_quad_vertex_rect); 428 SkRect quad_rect = gfx::RectFToSkRect(visible_quad_vertex_rect);
430 429
431 if (quad->y_flipped) 430 if (quad->y_flipped)
432 current_canvas_->scale(1, -1); 431 current_canvas_->scale(1, -1);
433 432
434 bool blend_background = quad->background_color != SK_ColorTRANSPARENT && 433 bool blend_background =
435 !bitmap->isOpaque(); 434 quad->background_color != SK_ColorTRANSPARENT && !image->isOpaque();
436 bool needs_layer = blend_background && (current_paint_.getAlpha() != 0xFF); 435 bool needs_layer = blend_background && (current_paint_.getAlpha() != 0xFF);
437 if (needs_layer) { 436 if (needs_layer) {
438 current_canvas_->saveLayerAlpha(&quad_rect, current_paint_.getAlpha()); 437 current_canvas_->saveLayerAlpha(&quad_rect, current_paint_.getAlpha());
439 current_paint_.setAlpha(0xFF); 438 current_paint_.setAlpha(0xFF);
440 } 439 }
441 if (blend_background) { 440 if (blend_background) {
442 SkPaint background_paint; 441 SkPaint background_paint;
443 background_paint.setColor(quad->background_color); 442 background_paint.setColor(quad->background_color);
444 current_canvas_->drawRect(quad_rect, background_paint); 443 current_canvas_->drawRect(quad_rect, background_paint);
445 } 444 }
446 current_paint_.setFilterQuality( 445 current_paint_.setFilterQuality(
447 quad->nearest_neighbor ? kNone_SkFilterQuality : kLow_SkFilterQuality); 446 quad->nearest_neighbor ? kNone_SkFilterQuality : kLow_SkFilterQuality);
448 current_canvas_->drawBitmapRect(*bitmap, sk_uv_rect, quad_rect, 447 current_canvas_->drawImageRect(image, sk_uv_rect, quad_rect, &current_paint_);
449 &current_paint_);
450 if (needs_layer) 448 if (needs_layer)
451 current_canvas_->restore(); 449 current_canvas_->restore();
452 } 450 }
453 451
454 void SoftwareRenderer::DrawTileQuad(const DrawingFrame* frame, 452 void SoftwareRenderer::DrawTileQuad(const DrawingFrame* frame,
455 const TileDrawQuad* quad) { 453 const TileDrawQuad* quad) {
456 // |resource_provider_| can be NULL in resourceless software draws, which 454 // |resource_provider_| can be NULL in resourceless software draws, which
457 // should never produce tile quads in the first place. 455 // should never produce tile quads in the first place.
458 DCHECK(resource_provider_); 456 DCHECK(resource_provider_);
459 DCHECK(IsSoftwareResource(quad->resource_id())); 457 DCHECK(IsSoftwareResource(quad->resource_id()));
460 458
461 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_, 459 ResourceProvider::ScopedReadLockSkImage lock(resource_provider_,
462 quad->resource_id()); 460 quad->resource_id());
463 if (!lock.valid()) 461 if (!lock.valid())
464 return; 462 return;
465 463
466 gfx::RectF visible_tex_coord_rect = MathUtil::ScaleRectProportional( 464 gfx::RectF visible_tex_coord_rect = MathUtil::ScaleRectProportional(
467 quad->tex_coord_rect, gfx::RectF(quad->rect), 465 quad->tex_coord_rect, gfx::RectF(quad->rect),
468 gfx::RectF(quad->visible_rect)); 466 gfx::RectF(quad->visible_rect));
469 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional( 467 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional(
470 QuadVertexRect(), gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect)); 468 QuadVertexRect(), gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect));
471 469
472 SkRect uv_rect = gfx::RectFToSkRect(visible_tex_coord_rect); 470 SkRect uv_rect = gfx::RectFToSkRect(visible_tex_coord_rect);
473 current_paint_.setFilterQuality( 471 current_paint_.setFilterQuality(
474 quad->nearest_neighbor ? kNone_SkFilterQuality : kLow_SkFilterQuality); 472 quad->nearest_neighbor ? kNone_SkFilterQuality : kLow_SkFilterQuality);
475 current_canvas_->drawBitmapRect(*lock.sk_bitmap(), uv_rect, 473 current_canvas_->drawImageRect(lock.sk_image(), uv_rect,
476 gfx::RectFToSkRect(visible_quad_vertex_rect), 474 gfx::RectFToSkRect(visible_quad_vertex_rect),
477 &current_paint_); 475 &current_paint_);
478 } 476 }
479 477
480 void SoftwareRenderer::DrawRenderPassQuad(const DrawingFrame* frame, 478 void SoftwareRenderer::DrawRenderPassQuad(const DrawingFrame* frame,
481 const RenderPassDrawQuad* quad) { 479 const RenderPassDrawQuad* quad) {
482 ScopedResource* content_texture = 480 ScopedResource* content_texture =
483 render_pass_textures_[quad->render_pass_id].get(); 481 render_pass_textures_[quad->render_pass_id].get();
484 DCHECK(content_texture); 482 DCHECK(content_texture);
485 DCHECK(content_texture->id()); 483 DCHECK(content_texture->id());
486 DCHECK(IsSoftwareResource(content_texture->id())); 484 DCHECK(IsSoftwareResource(content_texture->id()));
487 485
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 ApplyImageFilter(filter.get(), quad, backdrop_bitmap, nullptr); 749 ApplyImageFilter(filter.get(), quad, backdrop_bitmap, nullptr);
752 750
753 if (!filter_backdrop_image) 751 if (!filter_backdrop_image)
754 return nullptr; 752 return nullptr;
755 753
756 return filter_backdrop_image->makeShader(content_tile_mode, content_tile_mode, 754 return filter_backdrop_image->makeShader(content_tile_mode, content_tile_mode,
757 &filter_backdrop_transform); 755 &filter_backdrop_transform);
758 } 756 }
759 757
760 } // namespace cc 758 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/skia_renderer.cc ('k') | cc/resources/resource_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698