| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/layers/render_surface_impl.h" | 5 #include "cc/layers/render_surface_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 namespace cc { | 31 namespace cc { |
| 32 | 32 |
| 33 RenderSurfaceImpl::RenderSurfaceImpl(LayerTreeImpl* layer_tree_impl, | 33 RenderSurfaceImpl::RenderSurfaceImpl(LayerTreeImpl* layer_tree_impl, |
| 34 int stable_effect_id) | 34 int stable_effect_id) |
| 35 : layer_tree_impl_(layer_tree_impl), | 35 : layer_tree_impl_(layer_tree_impl), |
| 36 stable_effect_id_(stable_effect_id), | 36 stable_effect_id_(stable_effect_id), |
| 37 effect_tree_index_(EffectTree::kInvalidNodeId), | 37 effect_tree_index_(EffectTree::kInvalidNodeId), |
| 38 surface_property_changed_(false), | 38 surface_property_changed_(false), |
| 39 ancestor_property_changed_(false), | 39 ancestor_property_changed_(false), |
| 40 contributes_to_drawn_surface_(false), | 40 contributes_to_drawn_surface_(false), |
| 41 nearest_occlusion_immune_ancestor_(nullptr), | 41 nearest_occlusion_immune_ancestor_(nullptr) { |
| 42 target_render_surface_layer_index_history_(0), | |
| 43 current_layer_index_history_(0) { | |
| 44 damage_tracker_ = DamageTracker::Create(); | 42 damage_tracker_ = DamageTracker::Create(); |
| 45 } | 43 } |
| 46 | 44 |
| 47 RenderSurfaceImpl::~RenderSurfaceImpl() {} | 45 RenderSurfaceImpl::~RenderSurfaceImpl() {} |
| 48 | 46 |
| 49 RenderSurfaceImpl* RenderSurfaceImpl::render_target() { | 47 RenderSurfaceImpl* RenderSurfaceImpl::render_target() { |
| 50 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; | 48 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; |
| 51 EffectNode* node = effect_tree.Node(EffectTreeIndex()); | 49 EffectNode* node = effect_tree.Node(EffectTreeIndex()); |
| 52 if (node->target_id != EffectTree::kRootNodeId) | 50 if (node->target_id != EffectTree::kRootNodeId) |
| 53 return effect_tree.GetRenderSurface(node->target_id); | 51 return effect_tree.GetRenderSurface(node->target_id); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 73 RenderSurfaceImpl::DrawProperties::~DrawProperties() {} | 71 RenderSurfaceImpl::DrawProperties::~DrawProperties() {} |
| 74 | 72 |
| 75 gfx::RectF RenderSurfaceImpl::DrawableContentRect() const { | 73 gfx::RectF RenderSurfaceImpl::DrawableContentRect() const { |
| 76 if (content_rect().IsEmpty()) | 74 if (content_rect().IsEmpty()) |
| 77 return gfx::RectF(); | 75 return gfx::RectF(); |
| 78 | 76 |
| 79 gfx::Rect surface_content_rect = content_rect(); | 77 gfx::Rect surface_content_rect = content_rect(); |
| 80 const FilterOperations& filters = Filters(); | 78 const FilterOperations& filters = Filters(); |
| 81 if (!filters.IsEmpty()) { | 79 if (!filters.IsEmpty()) { |
| 82 surface_content_rect = | 80 surface_content_rect = |
| 83 filters.MapRect(surface_content_rect, FiltersTransform().matrix()); | 81 filters.MapRect(surface_content_rect, SurfaceScale().matrix()); |
| 84 } | 82 } |
| 85 gfx::RectF drawable_content_rect = MathUtil::MapClippedRect( | 83 gfx::RectF drawable_content_rect = MathUtil::MapClippedRect( |
| 86 draw_transform(), gfx::RectF(surface_content_rect)); | 84 draw_transform(), gfx::RectF(surface_content_rect)); |
| 87 if (!filters.IsEmpty() && is_clipped()) { | 85 if (!filters.IsEmpty() && is_clipped()) { |
| 88 // Filter could move pixels around, but still need to be clipped. | 86 // Filter could move pixels around, but still need to be clipped. |
| 89 drawable_content_rect.Intersect(gfx::RectF(clip_rect())); | 87 drawable_content_rect.Intersect(gfx::RectF(clip_rect())); |
| 90 } | 88 } |
| 91 | 89 |
| 92 // If the rect has a NaN coordinate, we return empty rect to avoid crashes in | 90 // If the rect has a NaN coordinate, we return empty rect to avoid crashes in |
| 93 // functions (for example, gfx::ToEnclosedRect) that are called on this rect. | 91 // functions (for example, gfx::ToEnclosedRect) that are called on this rect. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 } | 125 } |
| 128 | 126 |
| 129 const FilterOperations& RenderSurfaceImpl::Filters() const { | 127 const FilterOperations& RenderSurfaceImpl::Filters() const { |
| 130 return OwningEffectNode()->filters; | 128 return OwningEffectNode()->filters; |
| 131 } | 129 } |
| 132 | 130 |
| 133 gfx::PointF RenderSurfaceImpl::FiltersOrigin() const { | 131 gfx::PointF RenderSurfaceImpl::FiltersOrigin() const { |
| 134 return OwningEffectNode()->filters_origin; | 132 return OwningEffectNode()->filters_origin; |
| 135 } | 133 } |
| 136 | 134 |
| 137 gfx::Transform RenderSurfaceImpl::FiltersTransform() const { | 135 gfx::Transform RenderSurfaceImpl::SurfaceScale() const { |
| 138 gfx::Transform filters_transform; | 136 gfx::Transform surface_scale; |
| 139 filters_transform.Scale(OwningEffectNode()->surface_contents_scale.x(), | 137 surface_scale.Scale(OwningEffectNode()->surface_contents_scale.x(), |
| 140 OwningEffectNode()->surface_contents_scale.y()); | 138 OwningEffectNode()->surface_contents_scale.y()); |
| 141 return filters_transform; | 139 return surface_scale; |
| 142 } | 140 } |
| 143 | 141 |
| 144 const FilterOperations& RenderSurfaceImpl::BackgroundFilters() const { | 142 const FilterOperations& RenderSurfaceImpl::BackgroundFilters() const { |
| 145 return OwningEffectNode()->background_filters; | 143 return OwningEffectNode()->background_filters; |
| 146 } | 144 } |
| 147 | 145 |
| 148 bool RenderSurfaceImpl::HasCopyRequest() const { | 146 bool RenderSurfaceImpl::HasCopyRequest() const { |
| 149 return OwningEffectNode()->has_copy_request; | 147 return OwningEffectNode()->has_copy_request; |
| 150 } | 148 } |
| 151 | 149 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 } | 185 } |
| 188 | 186 |
| 189 void RenderSurfaceImpl::SetContentRectForTesting(const gfx::Rect& rect) { | 187 void RenderSurfaceImpl::SetContentRectForTesting(const gfx::Rect& rect) { |
| 190 SetContentRect(rect); | 188 SetContentRect(rect); |
| 191 } | 189 } |
| 192 | 190 |
| 193 gfx::Rect RenderSurfaceImpl::CalculateExpandedClipForFilters( | 191 gfx::Rect RenderSurfaceImpl::CalculateExpandedClipForFilters( |
| 194 const gfx::Transform& target_to_surface) { | 192 const gfx::Transform& target_to_surface) { |
| 195 gfx::Rect clip_in_surface_space = | 193 gfx::Rect clip_in_surface_space = |
| 196 MathUtil::ProjectEnclosingClippedRect(target_to_surface, clip_rect()); | 194 MathUtil::ProjectEnclosingClippedRect(target_to_surface, clip_rect()); |
| 197 gfx::Rect expanded_clip_in_surface_space = Filters().MapRectReverse( | 195 gfx::Rect expanded_clip_in_surface_space = |
| 198 clip_in_surface_space, FiltersTransform().matrix()); | 196 Filters().MapRectReverse(clip_in_surface_space, SurfaceScale().matrix()); |
| 199 gfx::Rect expanded_clip_in_target_space = MathUtil::MapEnclosingClippedRect( | 197 gfx::Rect expanded_clip_in_target_space = MathUtil::MapEnclosingClippedRect( |
| 200 draw_transform(), expanded_clip_in_surface_space); | 198 draw_transform(), expanded_clip_in_surface_space); |
| 201 return expanded_clip_in_target_space; | 199 return expanded_clip_in_target_space; |
| 202 } | 200 } |
| 203 | 201 |
| 204 gfx::Rect RenderSurfaceImpl::CalculateClippedAccumulatedContentRect() { | 202 gfx::Rect RenderSurfaceImpl::CalculateClippedAccumulatedContentRect() { |
| 205 if (HasCopyRequest() || !is_clipped()) | 203 if (HasCopyRequest() || !is_clipped()) |
| 206 return accumulated_content_rect(); | 204 return accumulated_content_rect(); |
| 207 | 205 |
| 208 if (accumulated_content_rect().IsEmpty()) | 206 if (accumulated_content_rect().IsEmpty()) |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 RenderPassDrawQuad* quad = | 418 RenderPassDrawQuad* quad = |
| 421 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 419 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
| 422 quad->SetNew( | 420 quad->SetNew( |
| 423 shared_quad_state, content_rect(), visible_layer_rect, GetRenderPassId(), | 421 shared_quad_state, content_rect(), visible_layer_rect, GetRenderPassId(), |
| 424 mask_resource_id, gfx::ScaleRect(gfx::RectF(content_rect()), | 422 mask_resource_id, gfx::ScaleRect(gfx::RectF(content_rect()), |
| 425 mask_uv_scale.x(), mask_uv_scale.y()), | 423 mask_uv_scale.x(), mask_uv_scale.y()), |
| 426 mask_texture_size, surface_contents_scale, FiltersOrigin(), gfx::RectF()); | 424 mask_texture_size, surface_contents_scale, FiltersOrigin(), gfx::RectF()); |
| 427 } | 425 } |
| 428 | 426 |
| 429 } // namespace cc | 427 } // namespace cc |
| OLD | NEW |