OLD | NEW |
1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 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/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
981 cf = skia::AdoptRef(colorfilter_rawptr); | 981 cf = skia::AdoptRef(colorfilter_rawptr); |
982 } | 982 } |
983 | 983 |
984 if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) { | 984 if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) { |
985 // We have a single color matrix as a filter; apply it locally | 985 // We have a single color matrix as a filter; apply it locally |
986 // in the compositor. | 986 // in the compositor. |
987 use_color_matrix = true; | 987 use_color_matrix = true; |
988 } else { | 988 } else { |
989 gfx::RectF src_rect = rect; | 989 gfx::RectF src_rect = rect; |
990 gfx::Vector2dF scale = quad->filters_scale; | 990 gfx::Vector2dF scale = quad->filters_scale; |
991 // Compute the destination rect for the filtered output. | 991 SkMatrix scale_matrix; |
992 // Note that we leave the dest rect equal to the src rect when | 992 scale_matrix.setScale(scale.x(), scale.y()); |
993 // a filter chain cannot compute its bounds. This is correct | 993 SkIRect result_rect; |
994 // behaviour, but Skia is a little conservative at the moment. | 994 filter->filterBounds(gfx::RectToSkIRect(quad->rect), scale_matrix, |
995 // Once Skia makes the fast-bounds traversal crop-rect aware | 995 &result_rect, |
996 // (http://skbug.com/4627), this won't be a problem | 996 SkImageFilter::kForward_MapDirection); |
997 // for Chrome since Blink always sets a crop rect on the leaf nodes | 997 rect = gfx::SkRectToRectF(SkRect::Make(result_rect)); |
998 // of the DAG, making it always computable. | |
999 // TODO(senorblanco): remove this comment when http://skbug.com/4627 | |
1000 // is fixed. | |
1001 if (filter->canComputeFastBounds()) { | |
1002 SkRect result_rect; | |
1003 rect.Scale(1.0f / scale.x(), 1.0f / scale.y()); | |
1004 filter->computeFastBounds(gfx::RectFToSkRect(rect), &result_rect); | |
1005 rect = gfx::SkRectToRectF(result_rect); | |
1006 rect.Scale(scale.x(), scale.y()); | |
1007 } | |
1008 filter_image = ApplyImageFilter(ScopedUseGrContext::Create(this, frame), | 998 filter_image = ApplyImageFilter(ScopedUseGrContext::Create(this, frame), |
1009 resource_provider_, src_rect, rect, | 999 resource_provider_, src_rect, rect, |
1010 scale, filter.get(), contents_texture); | 1000 scale, filter.get(), contents_texture); |
1011 if (filter_image) { | 1001 if (filter_image) { |
1012 filter_image_id = filter_image->getTextureHandle(true); | 1002 filter_image_id = filter_image->getTextureHandle(true); |
1013 DCHECK(filter_image_id); | 1003 DCHECK(filter_image_id); |
1014 } | 1004 } |
1015 } | 1005 } |
1016 } | 1006 } |
1017 } | 1007 } |
(...skipping 2589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3607 texture_id = pending_overlay_resources_.back()->texture_id(); | 3597 texture_id = pending_overlay_resources_.back()->texture_id(); |
3608 } | 3598 } |
3609 | 3599 |
3610 context_support_->ScheduleOverlayPlane( | 3600 context_support_->ScheduleOverlayPlane( |
3611 overlay.plane_z_order, overlay.transform, texture_id, | 3601 overlay.plane_z_order, overlay.transform, texture_id, |
3612 ToNearestRect(overlay.display_rect), overlay.uv_rect); | 3602 ToNearestRect(overlay.display_rect), overlay.uv_rect); |
3613 } | 3603 } |
3614 } | 3604 } |
3615 | 3605 |
3616 } // namespace cc | 3606 } // namespace cc |
OLD | NEW |