diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-11-14 18:50:59 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-11-15 13:43:12 +0300 |
commit | 773110f848d52f330f5d1962ada73585d9e95d23 (patch) | |
tree | b6e8e07c8e12986a1990127e6d16eedea935a135 /source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc | |
parent | 156fe74f914e720297a7c444b7df9568eeaaa09f (diff) |
Depsgraph: Save memory by ignoring invisible objects
This finished old standing TODO which was attempting to
ignore objects of all invisible collections.
The difference here is that we remove invisible bases from
view layers. This guarantees that the evaluated state is
consistent and does not reference original objects.
Diffstat (limited to 'source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc index 5efa427fcdb..70bd533647c 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc @@ -75,7 +75,7 @@ void DepsgraphNodeBuilder::build_layer_collections(ListBase *lb) continue; } if ((lc->flag & LAYER_COLLECTION_EXCLUDE) == 0) { - build_collection(lc->collection); + build_collection(lc, lc->collection); } build_layer_collections(&lc->layer_collections); } @@ -86,8 +86,9 @@ void DepsgraphNodeBuilder::build_view_layer( ViewLayer *view_layer, eDepsNode_LinkedState_Type linked_state) { - view_layer_index_ = BLI_findindex(&scene->view_layers, view_layer); - BLI_assert(view_layer_index_ != -1); + /* NOTE: Pass view layer index of 0 since after scene CoW there is + * only one view layer in there. */ + view_layer_index_ = 0; /* Scene ID block. */ add_id_node(&scene->id); /* Time source. */ @@ -109,9 +110,14 @@ void DepsgraphNodeBuilder::build_view_layer( LISTBASE_FOREACH(Base *, base, &view_layer->object_bases) { /* object itself */ const bool is_object_visible = (base->flag & base_flag); - build_object(base_index, base->object, linked_state, is_object_visible); + if (is_object_visible) { + build_object(base_index, + base->object, + linked_state, + is_object_visible); + ++base_index; + } base->object->select_color = select_color++; - ++base_index; } build_layer_collections(&view_layer->layer_collections); if (scene->camera != NULL) { |