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

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

Issue 1314943008: cc: Remove implicit conversions from Rect to RectF in src/cc/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rectfconvert-cc: rebase-and-sandwich-strategy Created 5 years, 3 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/renderer_pixeltest.cc ('k') | cc/playback/display_item_list_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/trace_event/trace_event.h" 7 #include "base/trace_event/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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 } 95 }
96 96
97 SoftwareRenderer::~SoftwareRenderer() {} 97 SoftwareRenderer::~SoftwareRenderer() {}
98 98
99 const RendererCapabilitiesImpl& SoftwareRenderer::Capabilities() const { 99 const RendererCapabilitiesImpl& SoftwareRenderer::Capabilities() const {
100 return capabilities_; 100 return capabilities_;
101 } 101 }
102 102
103 void SoftwareRenderer::BeginDrawingFrame(DrawingFrame* frame) { 103 void SoftwareRenderer::BeginDrawingFrame(DrawingFrame* frame) {
104 TRACE_EVENT0("cc", "SoftwareRenderer::BeginDrawingFrame"); 104 TRACE_EVENT0("cc", "SoftwareRenderer::BeginDrawingFrame");
105 root_canvas_ = output_device_->BeginPaint( 105 root_canvas_ = output_device_->BeginPaint(frame->root_damage_rect);
106 gfx::ToEnclosingRect(frame->root_damage_rect));
107 } 106 }
108 107
109 void SoftwareRenderer::FinishDrawingFrame(DrawingFrame* frame) { 108 void SoftwareRenderer::FinishDrawingFrame(DrawingFrame* frame) {
110 TRACE_EVENT0("cc", "SoftwareRenderer::FinishDrawingFrame"); 109 TRACE_EVENT0("cc", "SoftwareRenderer::FinishDrawingFrame");
111 current_framebuffer_lock_ = nullptr; 110 current_framebuffer_lock_ = nullptr;
112 current_framebuffer_canvas_.clear(); 111 current_framebuffer_canvas_.clear();
113 current_canvas_ = NULL; 112 current_canvas_ = NULL;
114 root_canvas_ = NULL; 113 root_canvas_ = NULL;
115 114
116 output_device_->EndPaint(); 115 output_device_->EndPaint();
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 if (!current_canvas_) 246 if (!current_canvas_)
248 return; 247 return;
249 if (draw_region) { 248 if (draw_region) {
250 current_canvas_->save(); 249 current_canvas_->save();
251 } 250 }
252 251
253 TRACE_EVENT0("cc", "SoftwareRenderer::DoDrawQuad"); 252 TRACE_EVENT0("cc", "SoftwareRenderer::DoDrawQuad");
254 gfx::Transform quad_rect_matrix; 253 gfx::Transform quad_rect_matrix;
255 QuadRectTransform(&quad_rect_matrix, 254 QuadRectTransform(&quad_rect_matrix,
256 quad->shared_quad_state->quad_to_target_transform, 255 quad->shared_quad_state->quad_to_target_transform,
257 quad->rect); 256 gfx::RectF(quad->rect));
258 gfx::Transform contents_device_transform = 257 gfx::Transform contents_device_transform =
259 frame->window_matrix * frame->projection_matrix * quad_rect_matrix; 258 frame->window_matrix * frame->projection_matrix * quad_rect_matrix;
260 contents_device_transform.FlattenTo2d(); 259 contents_device_transform.FlattenTo2d();
261 SkMatrix sk_device_matrix; 260 SkMatrix sk_device_matrix;
262 gfx::TransformToFlattenedSkMatrix(contents_device_transform, 261 gfx::TransformToFlattenedSkMatrix(contents_device_transform,
263 &sk_device_matrix); 262 &sk_device_matrix);
264 current_canvas_->setMatrix(sk_device_matrix); 263 current_canvas_->setMatrix(sk_device_matrix);
265 264
266 current_paint_.reset(); 265 current_paint_.reset();
267 if (settings_->force_antialiasing || 266 if (settings_->force_antialiasing ||
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 &filtered_canvas, quad->content_rect, quad->contents_scale); 388 &filtered_canvas, quad->content_rect, quad->contents_scale);
390 } else { 389 } else {
391 quad->raster_source->PlaybackToSharedCanvas( 390 quad->raster_source->PlaybackToSharedCanvas(
392 current_canvas_, quad->content_rect, quad->contents_scale); 391 current_canvas_, quad->content_rect, quad->contents_scale);
393 } 392 }
394 } 393 }
395 394
396 void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame, 395 void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame,
397 const SolidColorDrawQuad* quad) { 396 const SolidColorDrawQuad* quad) {
398 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional( 397 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional(
399 QuadVertexRect(), quad->rect, quad->visible_rect); 398 QuadVertexRect(), gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect));
400 current_paint_.setColor(quad->color); 399 current_paint_.setColor(quad->color);
401 current_paint_.setAlpha(quad->shared_quad_state->opacity * 400 current_paint_.setAlpha(quad->shared_quad_state->opacity *
402 SkColorGetA(quad->color)); 401 SkColorGetA(quad->color));
403 current_canvas_->drawRect(gfx::RectFToSkRect(visible_quad_vertex_rect), 402 current_canvas_->drawRect(gfx::RectFToSkRect(visible_quad_vertex_rect),
404 current_paint_); 403 current_paint_);
405 } 404 }
406 405
407 void SoftwareRenderer::DrawTextureQuad(const DrawingFrame* frame, 406 void SoftwareRenderer::DrawTextureQuad(const DrawingFrame* frame,
408 const TextureDrawQuad* quad) { 407 const TextureDrawQuad* quad) {
409 if (!IsSoftwareResource(quad->resource_id())) { 408 if (!IsSoftwareResource(quad->resource_id())) {
410 DrawUnsupportedQuad(frame, quad); 409 DrawUnsupportedQuad(frame, quad);
411 return; 410 return;
412 } 411 }
413 412
414 // TODO(skaslev): Add support for non-premultiplied alpha. 413 // TODO(skaslev): Add support for non-premultiplied alpha.
415 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_, 414 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_,
416 quad->resource_id()); 415 quad->resource_id());
417 if (!lock.valid()) 416 if (!lock.valid())
418 return; 417 return;
419 const SkBitmap* bitmap = lock.sk_bitmap(); 418 const SkBitmap* bitmap = lock.sk_bitmap();
420 gfx::RectF uv_rect = gfx::ScaleRect(gfx::BoundingRect(quad->uv_top_left, 419 gfx::RectF uv_rect = gfx::ScaleRect(gfx::BoundingRect(quad->uv_top_left,
421 quad->uv_bottom_right), 420 quad->uv_bottom_right),
422 bitmap->width(), 421 bitmap->width(),
423 bitmap->height()); 422 bitmap->height());
424 gfx::RectF visible_uv_rect = 423 gfx::RectF visible_uv_rect = MathUtil::ScaleRectProportional(
425 MathUtil::ScaleRectProportional(uv_rect, quad->rect, 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(), quad->rect, 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 = quad->background_color != SK_ColorTRANSPARENT &&
435 !bitmap->isOpaque(); 434 !bitmap->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());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 DCHECK(resource_provider_); 470 DCHECK(resource_provider_);
472 DCHECK(IsSoftwareResource(quad->resource_id())); 471 DCHECK(IsSoftwareResource(quad->resource_id()));
473 472
474 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_, 473 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_,
475 quad->resource_id()); 474 quad->resource_id());
476 if (!lock.valid()) 475 if (!lock.valid())
477 return; 476 return;
478 DCHECK_EQ(GL_CLAMP_TO_EDGE, lock.wrap_mode()); 477 DCHECK_EQ(GL_CLAMP_TO_EDGE, lock.wrap_mode());
479 478
480 gfx::RectF visible_tex_coord_rect = MathUtil::ScaleRectProportional( 479 gfx::RectF visible_tex_coord_rect = MathUtil::ScaleRectProportional(
481 quad->tex_coord_rect, quad->rect, quad->visible_rect); 480 quad->tex_coord_rect, gfx::RectF(quad->rect),
481 gfx::RectF(quad->visible_rect));
482 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional( 482 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional(
483 QuadVertexRect(), quad->rect, quad->visible_rect); 483 QuadVertexRect(), gfx::RectF(quad->rect), gfx::RectF(quad->visible_rect));
484 484
485 SkRect uv_rect = gfx::RectFToSkRect(visible_tex_coord_rect); 485 SkRect uv_rect = gfx::RectFToSkRect(visible_tex_coord_rect);
486 current_paint_.setFilterQuality( 486 current_paint_.setFilterQuality(
487 quad->nearest_neighbor ? kNone_SkFilterQuality : kLow_SkFilterQuality); 487 quad->nearest_neighbor ? kNone_SkFilterQuality : kLow_SkFilterQuality);
488 current_canvas_->drawBitmapRect(*lock.sk_bitmap(), uv_rect, 488 current_canvas_->drawBitmapRect(*lock.sk_bitmap(), uv_rect,
489 gfx::RectFToSkRect(visible_quad_vertex_rect), 489 gfx::RectFToSkRect(visible_quad_vertex_rect),
490 &current_paint_); 490 &current_paint_);
491 } 491 }
492 492
493 void SoftwareRenderer::DrawRenderPassQuad(const DrawingFrame* frame, 493 void SoftwareRenderer::DrawRenderPassQuad(const DrawingFrame* frame,
494 const RenderPassDrawQuad* quad) { 494 const RenderPassDrawQuad* quad) {
495 ScopedResource* content_texture = 495 ScopedResource* content_texture =
496 render_pass_textures_.get(quad->render_pass_id); 496 render_pass_textures_.get(quad->render_pass_id);
497 DCHECK(content_texture); 497 DCHECK(content_texture);
498 DCHECK(content_texture->id()); 498 DCHECK(content_texture->id());
499 DCHECK(IsSoftwareResource(content_texture->id())); 499 DCHECK(IsSoftwareResource(content_texture->id()));
500 500
501 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_, 501 ResourceProvider::ScopedReadLockSoftware lock(resource_provider_,
502 content_texture->id()); 502 content_texture->id());
503 if (!lock.valid()) 503 if (!lock.valid())
504 return; 504 return;
505 SkShader::TileMode content_tile_mode = WrapModeToTileMode(lock.wrap_mode()); 505 SkShader::TileMode content_tile_mode = WrapModeToTileMode(lock.wrap_mode());
506 506
507 SkRect dest_rect = gfx::RectFToSkRect(QuadVertexRect()); 507 SkRect dest_rect = gfx::RectFToSkRect(QuadVertexRect());
508 SkRect dest_visible_rect = gfx::RectFToSkRect(MathUtil::ScaleRectProportional( 508 SkRect dest_visible_rect = gfx::RectFToSkRect(
509 QuadVertexRect(), quad->rect, quad->visible_rect)); 509 MathUtil::ScaleRectProportional(QuadVertexRect(), gfx::RectF(quad->rect),
510 gfx::RectF(quad->visible_rect)));
510 SkRect content_rect = SkRect::MakeWH(quad->rect.width(), quad->rect.height()); 511 SkRect content_rect = SkRect::MakeWH(quad->rect.width(), quad->rect.height());
511 512
512 SkMatrix content_mat; 513 SkMatrix content_mat;
513 content_mat.setRectToRect(content_rect, dest_rect, 514 content_mat.setRectToRect(content_rect, dest_rect,
514 SkMatrix::kFill_ScaleToFit); 515 SkMatrix::kFill_ScaleToFit);
515 516
516 const SkBitmap* content = lock.sk_bitmap(); 517 const SkBitmap* content = lock.sk_bitmap();
517 518
518 SkBitmap filter_bitmap; 519 SkBitmap filter_bitmap;
519 if (!quad->filters.IsEmpty()) { 520 if (!quad->filters.IsEmpty()) {
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 skia::RefPtr<SkShader> SoftwareRenderer::GetBackgroundFilterShader( 702 skia::RefPtr<SkShader> SoftwareRenderer::GetBackgroundFilterShader(
702 const DrawingFrame* frame, 703 const DrawingFrame* frame,
703 const RenderPassDrawQuad* quad, 704 const RenderPassDrawQuad* quad,
704 SkShader::TileMode content_tile_mode) const { 705 SkShader::TileMode content_tile_mode) const {
705 if (!ShouldApplyBackgroundFilters(quad)) 706 if (!ShouldApplyBackgroundFilters(quad))
706 return skia::RefPtr<SkShader>(); 707 return skia::RefPtr<SkShader>();
707 708
708 gfx::Transform quad_rect_matrix; 709 gfx::Transform quad_rect_matrix;
709 QuadRectTransform(&quad_rect_matrix, 710 QuadRectTransform(&quad_rect_matrix,
710 quad->shared_quad_state->quad_to_target_transform, 711 quad->shared_quad_state->quad_to_target_transform,
711 quad->rect); 712 gfx::RectF(quad->rect));
712 gfx::Transform contents_device_transform = 713 gfx::Transform contents_device_transform =
713 frame->window_matrix * frame->projection_matrix * quad_rect_matrix; 714 frame->window_matrix * frame->projection_matrix * quad_rect_matrix;
714 contents_device_transform.FlattenTo2d(); 715 contents_device_transform.FlattenTo2d();
715 716
716 gfx::Rect backdrop_rect = GetBackdropBoundingBoxForRenderPassQuad( 717 gfx::Rect backdrop_rect = GetBackdropBoundingBoxForRenderPassQuad(
717 frame, quad, contents_device_transform); 718 frame, quad, contents_device_transform);
718 719
719 // Figure out the transformations to move it back to pixel space. 720 // Figure out the transformations to move it back to pixel space.
720 gfx::Transform contents_device_transform_inverse; 721 gfx::Transform contents_device_transform_inverse;
721 if (!contents_device_transform.GetInverse(&contents_device_transform_inverse)) 722 if (!contents_device_transform.GetInverse(&contents_device_transform_inverse))
(...skipping 14 matching lines...) Expand all
736 737
737 if (filter_backdrop_bitmap.empty()) 738 if (filter_backdrop_bitmap.empty())
738 return skia::RefPtr<SkShader>(); 739 return skia::RefPtr<SkShader>();
739 740
740 return skia::AdoptRef(SkShader::CreateBitmapShader( 741 return skia::AdoptRef(SkShader::CreateBitmapShader(
741 filter_backdrop_bitmap, content_tile_mode, content_tile_mode, 742 filter_backdrop_bitmap, content_tile_mode, content_tile_mode,
742 &filter_backdrop_transform)); 743 &filter_backdrop_transform));
743 } 744 }
744 745
745 } // namespace cc 746 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/renderer_pixeltest.cc ('k') | cc/playback/display_item_list_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698