OLD | NEW |
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/trees/occlusion_tracker.h" | 5 #include "cc/trees/occlusion_tracker.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 &stack_.back().occlusion_from_outside_target); | 328 &stack_.back().occlusion_from_outside_target); |
329 } | 329 } |
330 | 330 |
331 void OcclusionTracker::MarkOccludedBehindLayer(const LayerImpl* layer) { | 331 void OcclusionTracker::MarkOccludedBehindLayer(const LayerImpl* layer) { |
332 DCHECK(!stack_.empty()); | 332 DCHECK(!stack_.empty()); |
333 DCHECK_EQ(layer->render_target(), stack_.back().target); | 333 DCHECK_EQ(layer->render_target(), stack_.back().target); |
334 | 334 |
335 if (layer->draw_opacity() < 1) | 335 if (layer->draw_opacity() < 1) |
336 return; | 336 return; |
337 | 337 |
338 // The only currently supported draw_blend_mode is SrcOver mode, so | |
339 // draw_blend_mode does not affect occlusion. | |
340 DCHECK_EQ(layer->draw_blend_mode(), SkBlendMode::kSrcOver); | |
341 | |
342 if (layer->Is3dSorted()) | 338 if (layer->Is3dSorted()) |
343 return; | 339 return; |
344 | 340 |
345 SimpleEnclosedRegion opaque_layer_region = layer->VisibleOpaqueRegion(); | 341 SimpleEnclosedRegion opaque_layer_region = layer->VisibleOpaqueRegion(); |
346 if (opaque_layer_region.IsEmpty()) | 342 if (opaque_layer_region.IsEmpty()) |
347 return; | 343 return; |
348 | 344 |
349 DCHECK(layer->visible_layer_rect().Contains(opaque_layer_region.bounds())); | 345 DCHECK(layer->visible_layer_rect().Contains(opaque_layer_region.bounds())); |
350 | 346 |
351 gfx::Transform draw_transform = layer->DrawTransform(); | 347 gfx::Transform draw_transform = layer->DrawTransform(); |
(...skipping 26 matching lines...) Expand all Loading... |
378 DCHECK(layer_tree->RootRenderSurface() == stack_.back().target); | 374 DCHECK(layer_tree->RootRenderSurface() == stack_.back().target); |
379 const SimpleEnclosedRegion& occluded = | 375 const SimpleEnclosedRegion& occluded = |
380 stack_.back().occlusion_from_inside_target; | 376 stack_.back().occlusion_from_inside_target; |
381 Region visible_region(screen_space_clip_rect_); | 377 Region visible_region(screen_space_clip_rect_); |
382 for (size_t i = 0; i < occluded.GetRegionComplexity(); ++i) | 378 for (size_t i = 0; i < occluded.GetRegionComplexity(); ++i) |
383 visible_region.Subtract(occluded.GetRect(i)); | 379 visible_region.Subtract(occluded.GetRect(i)); |
384 return visible_region; | 380 return visible_region; |
385 } | 381 } |
386 | 382 |
387 } // namespace cc | 383 } // namespace cc |
OLD | NEW |