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

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

Issue 1001833005: Update from https://crrev.com/320343 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Supress Created 5 years, 9 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/software_renderer.h ('k') | cc/output/static_geometry_binding.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/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"
11 #include "cc/output/compositor_frame_metadata.h" 11 #include "cc/output/compositor_frame_metadata.h"
12 #include "cc/output/copy_output_request.h" 12 #include "cc/output/copy_output_request.h"
13 #include "cc/output/output_surface.h" 13 #include "cc/output/output_surface.h"
14 #include "cc/output/render_surface_filters.h" 14 #include "cc/output/render_surface_filters.h"
15 #include "cc/output/software_output_device.h" 15 #include "cc/output/software_output_device.h"
16 #include "cc/quads/checkerboard_draw_quad.h" 16 #include "cc/quads/checkerboard_draw_quad.h"
17 #include "cc/quads/debug_border_draw_quad.h" 17 #include "cc/quads/debug_border_draw_quad.h"
18 #include "cc/quads/picture_draw_quad.h" 18 #include "cc/quads/picture_draw_quad.h"
19 #include "cc/quads/render_pass_draw_quad.h" 19 #include "cc/quads/render_pass_draw_quad.h"
20 #include "cc/quads/solid_color_draw_quad.h" 20 #include "cc/quads/solid_color_draw_quad.h"
21 #include "cc/quads/texture_draw_quad.h" 21 #include "cc/quads/texture_draw_quad.h"
22 #include "cc/quads/tile_draw_quad.h" 22 #include "cc/quads/tile_draw_quad.h"
23 #include "skia/ext/opacity_draw_filter.h" 23 #include "skia/ext/opacity_draw_filter.h"
24 #include "third_party/skia/include/core/SkCanvas.h" 24 #include "third_party/skia/include/core/SkCanvas.h"
25 #include "third_party/skia/include/core/SkColor.h" 25 #include "third_party/skia/include/core/SkColor.h"
26 #include "third_party/skia/include/core/SkImageFilter.h" 26 #include "third_party/skia/include/core/SkImageFilter.h"
27 #include "third_party/skia/include/core/SkMatrix.h" 27 #include "third_party/skia/include/core/SkMatrix.h"
28 #include "third_party/skia/include/core/SkPoint.h"
28 #include "third_party/skia/include/core/SkShader.h" 29 #include "third_party/skia/include/core/SkShader.h"
29 #include "third_party/skia/include/effects/SkLayerRasterizer.h" 30 #include "third_party/skia/include/effects/SkLayerRasterizer.h"
30 #include "ui/gfx/geometry/rect_conversions.h" 31 #include "ui/gfx/geometry/rect_conversions.h"
31 #include "ui/gfx/skia_util.h" 32 #include "ui/gfx/skia_util.h"
32 #include "ui/gfx/transform.h" 33 #include "ui/gfx/transform.h"
33 34
34 namespace cc { 35 namespace cc {
35 namespace { 36 namespace {
36 37
37 static inline bool IsScalarNearlyInteger(SkScalar scalar) { 38 static inline bool IsScalarNearlyInteger(SkScalar scalar) {
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 case ResourceProvider::RESOURCE_TYPE_BITMAP: 229 case ResourceProvider::RESOURCE_TYPE_BITMAP:
229 return true; 230 return true;
230 case ResourceProvider::RESOURCE_TYPE_INVALID: 231 case ResourceProvider::RESOURCE_TYPE_INVALID:
231 break; 232 break;
232 } 233 }
233 234
234 LOG(FATAL) << "Invalid resource type."; 235 LOG(FATAL) << "Invalid resource type.";
235 return false; 236 return false;
236 } 237 }
237 238
238 void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame, const DrawQuad* quad) { 239 void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame,
240 const DrawQuad* quad,
241 const gfx::QuadF* draw_region) {
242 if (draw_region) {
243 current_canvas_->save();
244 }
245
239 TRACE_EVENT0("cc", "SoftwareRenderer::DoDrawQuad"); 246 TRACE_EVENT0("cc", "SoftwareRenderer::DoDrawQuad");
240 gfx::Transform quad_rect_matrix; 247 gfx::Transform quad_rect_matrix;
241 QuadRectTransform(&quad_rect_matrix, quad->quadTransform(), quad->rect); 248 QuadRectTransform(&quad_rect_matrix, quad->quadTransform(), quad->rect);
242 gfx::Transform contents_device_transform = 249 gfx::Transform contents_device_transform =
243 frame->window_matrix * frame->projection_matrix * quad_rect_matrix; 250 frame->window_matrix * frame->projection_matrix * quad_rect_matrix;
244 contents_device_transform.FlattenTo2d(); 251 contents_device_transform.FlattenTo2d();
245 SkMatrix sk_device_matrix; 252 SkMatrix sk_device_matrix;
246 gfx::TransformToFlattenedSkMatrix(contents_device_transform, 253 gfx::TransformToFlattenedSkMatrix(contents_device_transform,
247 &sk_device_matrix); 254 &sk_device_matrix);
248 current_canvas_->setMatrix(sk_device_matrix); 255 current_canvas_->setMatrix(sk_device_matrix);
(...skipping 14 matching lines...) Expand all
263 } 270 }
264 271
265 if (quad->ShouldDrawWithBlending() || 272 if (quad->ShouldDrawWithBlending() ||
266 quad->shared_quad_state->blend_mode != SkXfermode::kSrcOver_Mode) { 273 quad->shared_quad_state->blend_mode != SkXfermode::kSrcOver_Mode) {
267 current_paint_.setAlpha(quad->opacity() * 255); 274 current_paint_.setAlpha(quad->opacity() * 255);
268 current_paint_.setXfermodeMode(quad->shared_quad_state->blend_mode); 275 current_paint_.setXfermodeMode(quad->shared_quad_state->blend_mode);
269 } else { 276 } else {
270 current_paint_.setXfermodeMode(SkXfermode::kSrc_Mode); 277 current_paint_.setXfermodeMode(SkXfermode::kSrc_Mode);
271 } 278 }
272 279
280 if (draw_region) {
281 gfx::QuadF local_draw_region(*draw_region);
282 SkPath draw_region_clip_path;
283 local_draw_region -=
284 gfx::Vector2dF(quad->visible_rect.x(), quad->visible_rect.y());
285 local_draw_region.Scale(1.0f / quad->visible_rect.width(),
286 1.0f / quad->visible_rect.height());
287 local_draw_region -= gfx::Vector2dF(0.5f, 0.5f);
288
289 SkPoint clip_points[4];
290 QuadFToSkPoints(local_draw_region, clip_points);
291 draw_region_clip_path.addPoly(clip_points, 4, true);
292
293 current_canvas_->clipPath(draw_region_clip_path, SkRegion::kIntersect_Op,
294 false);
295 }
296
273 switch (quad->material) { 297 switch (quad->material) {
274 case DrawQuad::CHECKERBOARD: 298 case DrawQuad::CHECKERBOARD:
275 DrawCheckerboardQuad(frame, CheckerboardDrawQuad::MaterialCast(quad)); 299 // TODO(enne) For now since checkerboards shouldn't be part of a 3D
300 // context, clipping regions aren't supported so we skip drawing them
301 // if this becomes the case.
302 if (!draw_region) {
303 DrawCheckerboardQuad(frame, CheckerboardDrawQuad::MaterialCast(quad));
304 }
276 break; 305 break;
277 case DrawQuad::DEBUG_BORDER: 306 case DrawQuad::DEBUG_BORDER:
278 DrawDebugBorderQuad(frame, DebugBorderDrawQuad::MaterialCast(quad)); 307 DrawDebugBorderQuad(frame, DebugBorderDrawQuad::MaterialCast(quad));
279 break; 308 break;
280 case DrawQuad::PICTURE_CONTENT: 309 case DrawQuad::PICTURE_CONTENT:
281 DrawPictureQuad(frame, PictureDrawQuad::MaterialCast(quad)); 310 DrawPictureQuad(frame, PictureDrawQuad::MaterialCast(quad));
282 break; 311 break;
283 case DrawQuad::RENDER_PASS: 312 case DrawQuad::RENDER_PASS:
284 DrawRenderPassQuad(frame, RenderPassDrawQuad::MaterialCast(quad)); 313 DrawRenderPassQuad(frame, RenderPassDrawQuad::MaterialCast(quad));
285 break; 314 break;
(...skipping 14 matching lines...) Expand all
300 case DrawQuad::INVALID: 329 case DrawQuad::INVALID:
301 case DrawQuad::IO_SURFACE_CONTENT: 330 case DrawQuad::IO_SURFACE_CONTENT:
302 case DrawQuad::YUV_VIDEO_CONTENT: 331 case DrawQuad::YUV_VIDEO_CONTENT:
303 case DrawQuad::STREAM_VIDEO_CONTENT: 332 case DrawQuad::STREAM_VIDEO_CONTENT:
304 DrawUnsupportedQuad(frame, quad); 333 DrawUnsupportedQuad(frame, quad);
305 NOTREACHED(); 334 NOTREACHED();
306 break; 335 break;
307 } 336 }
308 337
309 current_canvas_->resetMatrix(); 338 current_canvas_->resetMatrix();
339 if (draw_region) {
340 current_canvas_->restore();
341 }
310 } 342 }
311 343
312 void SoftwareRenderer::DrawCheckerboardQuad(const DrawingFrame* frame, 344 void SoftwareRenderer::DrawCheckerboardQuad(const DrawingFrame* frame,
313 const CheckerboardDrawQuad* quad) { 345 const CheckerboardDrawQuad* quad) {
314 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional( 346 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional(
315 QuadVertexRect(), quad->rect, quad->visible_rect); 347 QuadVertexRect(), quad->rect, quad->visible_rect);
316 current_paint_.setColor(quad->color); 348 current_paint_.setColor(quad->color);
317 current_paint_.setAlpha(quad->opacity()); 349 current_paint_.setAlpha(quad->opacity());
318 current_canvas_->drawRect(gfx::RectFToSkRect(visible_quad_vertex_rect), 350 current_canvas_->drawRect(gfx::RectFToSkRect(visible_quad_vertex_rect),
319 current_paint_); 351 current_paint_);
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 } 644 }
613 645
614 void SoftwareRenderer::DidChangeVisibility() { 646 void SoftwareRenderer::DidChangeVisibility() {
615 if (visible()) 647 if (visible())
616 EnsureBackbuffer(); 648 EnsureBackbuffer();
617 else 649 else
618 DiscardBackbuffer(); 650 DiscardBackbuffer();
619 } 651 }
620 652
621 } // namespace cc 653 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/software_renderer.h ('k') | cc/output/static_geometry_binding.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698