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_relations_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_relations_view_layer.cc')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc index 360e823d1bd..999508cffed 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc @@ -79,7 +79,7 @@ void DepsgraphRelationBuilder::build_layer_collections(ListBase *lb) continue; } if ((lc->flag & LAYER_COLLECTION_EXCLUDE) == 0) { - build_collection(NULL, lc->collection); + build_collection(lc, NULL, lc->collection); } build_layer_collections(&lc->layer_collections); } @@ -94,8 +94,13 @@ void DepsgraphRelationBuilder::build_view_layer(Scene *scene, ViewLayer *view_la * passed to the evaluation functions. During relations builder we only * do NULL-pointer check of the base, so it's fine to pass original one. */ + const int base_flag = (graph_->mode == DAG_EVAL_VIEWPORT) ? + BASE_ENABLED_VIEWPORT : BASE_ENABLED_RENDER; LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) { - build_object(base, base->object); + const bool is_object_visible = (base->flag & base_flag); + if (is_object_visible) { + build_object(base, base->object); + } } build_layer_collections(&view_layer->layer_collections); |