OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
431 data.layers_are_clipped_when_surfaces_disabled(); | 431 data.layers_are_clipped_when_surfaces_disabled(); |
432 resets_clip = data.resets_clip(); | 432 resets_clip = data.resets_clip(); |
433 } | 433 } |
434 | 434 |
435 EffectNodeData::EffectNodeData() | 435 EffectNodeData::EffectNodeData() |
436 : opacity(1.f), | 436 : opacity(1.f), |
437 screen_space_opacity(1.f), | 437 screen_space_opacity(1.f), |
438 has_render_surface(false), | 438 has_render_surface(false), |
439 has_copy_request(false), | 439 has_copy_request(false), |
440 has_background_filters(false), | 440 has_background_filters(false), |
441 node_or_ancestor_has_background_filters(false), | |
442 to_screen_opacity_is_animated(false), | |
443 node_or_ancestor_has_backface_visible_surface(false), | |
444 double_sided(false), | |
441 is_drawn(true), | 445 is_drawn(true), |
442 has_animated_opacity(false), | 446 has_animated_opacity(false), |
443 effect_changed(false), | 447 effect_changed(false), |
444 num_copy_requests_in_subtree(0), | 448 num_copy_requests_in_subtree(0), |
445 transform_id(0), | 449 transform_id(0), |
446 clip_id(0) {} | 450 clip_id(0) {} |
447 | 451 |
448 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default; | 452 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default; |
449 | 453 |
450 bool EffectNodeData::operator==(const EffectNodeData& other) const { | 454 bool EffectNodeData::operator==(const EffectNodeData& other) const { |
451 return opacity == other.opacity && | 455 return opacity == other.opacity && |
452 screen_space_opacity == other.screen_space_opacity && | 456 screen_space_opacity == other.screen_space_opacity && |
453 has_render_surface == other.has_render_surface && | 457 has_render_surface == other.has_render_surface && |
454 has_copy_request == other.has_copy_request && | 458 has_copy_request == other.has_copy_request && |
455 has_background_filters == other.has_background_filters && | 459 has_background_filters == other.has_background_filters && |
456 is_drawn == other.is_drawn && | 460 node_or_ancestor_has_background_filters == |
461 other.node_or_ancestor_has_background_filters && | |
462 to_screen_opacity_is_animated == other.to_screen_opacity_is_animated && | |
463 node_or_ancestor_has_backface_visible_surface == | |
464 other.node_or_ancestor_has_backface_visible_surface && | |
465 double_sided == other.double_sided && is_drawn == other.is_drawn && | |
457 has_animated_opacity == other.has_animated_opacity && | 466 has_animated_opacity == other.has_animated_opacity && |
458 effect_changed == other.effect_changed && | 467 effect_changed == other.effect_changed && |
459 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree && | 468 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree && |
460 transform_id == other.transform_id && clip_id == other.clip_id; | 469 transform_id == other.transform_id && clip_id == other.clip_id; |
461 } | 470 } |
462 | 471 |
463 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const { | 472 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const { |
464 DCHECK(!proto->has_effect_node_data()); | 473 DCHECK(!proto->has_effect_node_data()); |
465 proto::EffectNodeData* data = proto->mutable_effect_node_data(); | 474 proto::EffectNodeData* data = proto->mutable_effect_node_data(); |
466 data->set_opacity(opacity); | 475 data->set_opacity(opacity); |
467 data->set_screen_space_opacity(screen_space_opacity); | 476 data->set_screen_space_opacity(screen_space_opacity); |
468 data->set_has_render_surface(has_render_surface); | 477 data->set_has_render_surface(has_render_surface); |
469 data->set_has_copy_request(has_copy_request); | 478 data->set_has_copy_request(has_copy_request); |
470 data->set_has_background_filters(has_background_filters); | 479 data->set_has_background_filters(has_background_filters); |
480 data->set_node_or_ancestor_has_background_filters( | |
481 node_or_ancestor_has_background_filters); | |
482 data->set_to_screen_opacity_is_animated(to_screen_opacity_is_animated); | |
483 data->set_node_or_ancestor_has_backface_visible_surface( | |
484 node_or_ancestor_has_backface_visible_surface); | |
485 data->set_double_sided(double_sided); | |
471 data->set_is_drawn(is_drawn); | 486 data->set_is_drawn(is_drawn); |
472 data->set_has_animated_opacity(has_animated_opacity); | 487 data->set_has_animated_opacity(has_animated_opacity); |
473 data->set_effect_changed(effect_changed); | 488 data->set_effect_changed(effect_changed); |
474 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree); | 489 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree); |
475 data->set_transform_id(transform_id); | 490 data->set_transform_id(transform_id); |
476 data->set_clip_id(clip_id); | 491 data->set_clip_id(clip_id); |
477 } | 492 } |
478 | 493 |
479 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) { | 494 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) { |
480 DCHECK(proto.has_effect_node_data()); | 495 DCHECK(proto.has_effect_node_data()); |
481 const proto::EffectNodeData& data = proto.effect_node_data(); | 496 const proto::EffectNodeData& data = proto.effect_node_data(); |
482 | 497 |
483 opacity = data.opacity(); | 498 opacity = data.opacity(); |
484 screen_space_opacity = data.screen_space_opacity(); | 499 screen_space_opacity = data.screen_space_opacity(); |
485 has_render_surface = data.has_render_surface(); | 500 has_render_surface = data.has_render_surface(); |
486 has_copy_request = data.has_copy_request(); | 501 has_copy_request = data.has_copy_request(); |
487 has_background_filters = data.has_background_filters(); | 502 has_background_filters = data.has_background_filters(); |
503 node_or_ancestor_has_background_filters = | |
504 data.node_or_ancestor_has_background_filters(); | |
505 to_screen_opacity_is_animated = data.to_screen_opacity_is_animated(); | |
506 node_or_ancestor_has_backface_visible_surface = | |
507 data.node_or_ancestor_has_backface_visible_surface(); | |
508 double_sided = data.double_sided(); | |
488 is_drawn = data.is_drawn(); | 509 is_drawn = data.is_drawn(); |
489 has_animated_opacity = data.has_animated_opacity(); | 510 has_animated_opacity = data.has_animated_opacity(); |
490 effect_changed = data.effect_changed(); | 511 effect_changed = data.effect_changed(); |
491 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree(); | 512 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree(); |
492 transform_id = data.transform_id(); | 513 transform_id = data.transform_id(); |
493 clip_id = data.clip_id(); | 514 clip_id = data.clip_id(); |
494 } | 515 } |
495 | 516 |
496 ScrollNodeData::ScrollNodeData() | 517 ScrollNodeData::ScrollNodeData() |
497 : scrollable(false), | 518 : scrollable(false), |
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1198 node->data.is_drawn = true; | 1219 node->data.is_drawn = true; |
1199 } | 1220 } |
1200 | 1221 |
1201 void EffectTree::UpdateEffectChanged(EffectNode* node, | 1222 void EffectTree::UpdateEffectChanged(EffectNode* node, |
1202 EffectNode* parent_node) { | 1223 EffectNode* parent_node) { |
1203 if (parent_node && parent_node->data.effect_changed) { | 1224 if (parent_node && parent_node->data.effect_changed) { |
1204 node->data.effect_changed = true; | 1225 node->data.effect_changed = true; |
1205 } | 1226 } |
1206 } | 1227 } |
1207 | 1228 |
1229 void EffectTree::UpdateBackfaceVisibility(EffectNode* node, | |
1230 EffectNode* parent_node) { | |
1231 if (node->owner_id == -1) { | |
1232 node->data.node_or_ancestor_has_backface_visible_surface = false; | |
1233 return; | |
1234 } | |
1235 if (parent_node && parent_node->data.double_sided && | |
ajuma
2016/03/30 17:10:11
I think that double-sidedness needs to be taken in
sunxd
2016/03/31 16:55:57
Done.
| |
1236 parent_node->data.node_or_ancestor_has_backface_visible_surface) { | |
1237 node->data.node_or_ancestor_has_backface_visible_surface = true; | |
1238 return; | |
1239 } | |
1240 | |
1241 TransformTree& transform_tree = property_trees()->transform_tree; | |
1242 if (node->data.has_render_surface) { | |
1243 TransformNode* transform_node = | |
1244 transform_tree.Node(node->data.transform_id); | |
1245 if (transform_node->data.is_invertible && | |
1246 transform_node->data.ancestors_are_invertible) { | |
1247 if (transform_node->data.sorting_context_id) { | |
1248 const TransformNode* parent_transform_node = | |
1249 transform_tree.parent(transform_node); | |
1250 if (parent_transform_node && | |
1251 parent_transform_node->data.sorting_context_id == | |
1252 transform_node->data.sorting_context_id) { | |
1253 gfx::Transform surface_draw_transform; | |
1254 transform_tree.ComputeTransform(transform_node->id, | |
1255 transform_node->data.target_id, | |
1256 &surface_draw_transform); | |
1257 node->data.node_or_ancestor_has_backface_visible_surface = | |
1258 surface_draw_transform.IsBackFaceVisible(); | |
1259 } else { | |
1260 node->data.node_or_ancestor_has_backface_visible_surface = | |
1261 transform_node->data.local.IsBackFaceVisible(); | |
1262 } | |
1263 return; | |
1264 } | |
1265 } | |
1266 } | |
1267 node->data.node_or_ancestor_has_backface_visible_surface = false; | |
1268 } | |
1269 | |
1208 void EffectTree::UpdateEffects(int id) { | 1270 void EffectTree::UpdateEffects(int id) { |
1209 EffectNode* node = Node(id); | 1271 EffectNode* node = Node(id); |
1210 EffectNode* parent_node = parent(node); | 1272 EffectNode* parent_node = parent(node); |
1211 | 1273 |
1212 UpdateOpacities(node, parent_node); | 1274 UpdateOpacities(node, parent_node); |
1213 UpdateIsDrawn(node, parent_node); | 1275 UpdateIsDrawn(node, parent_node); |
1214 UpdateEffectChanged(node, parent_node); | 1276 UpdateEffectChanged(node, parent_node); |
1277 UpdateBackfaceVisibility(node, parent_node); | |
1215 } | 1278 } |
1216 | 1279 |
1217 void EffectTree::ClearCopyRequests() { | 1280 void EffectTree::ClearCopyRequests() { |
1218 for (auto& node : nodes()) { | 1281 for (auto& node : nodes()) { |
1219 node.data.num_copy_requests_in_subtree = 0; | 1282 node.data.num_copy_requests_in_subtree = 0; |
1220 node.data.has_copy_request = false; | 1283 node.data.has_copy_request = false; |
1221 } | 1284 } |
1222 set_needs_update(true); | 1285 set_needs_update(true); |
1223 } | 1286 } |
1224 | 1287 |
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1850 break; | 1913 break; |
1851 case ALL_TREES: | 1914 case ALL_TREES: |
1852 transform_tree.ResetChangeTracking(); | 1915 transform_tree.ResetChangeTracking(); |
1853 effect_tree.ResetChangeTracking(); | 1916 effect_tree.ResetChangeTracking(); |
1854 } | 1917 } |
1855 changed = false; | 1918 changed = false; |
1856 full_tree_damaged = false; | 1919 full_tree_damaged = false; |
1857 } | 1920 } |
1858 | 1921 |
1859 } // namespace cc | 1922 } // namespace cc |
OLD | NEW |