Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-11-14 18:50:59 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-11-15 13:43:12 +0300
commit773110f848d52f330f5d1962ada73585d9e95d23 (patch)
treeb6e8e07c8e12986a1990127e6d16eedea935a135 /source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
parent156fe74f914e720297a7c444b7df9568eeaaa09f (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.cc9
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);