diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-11-15 14:47:58 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-11-15 14:48:55 +0300 |
commit | 9a9ca5e40bd88a5444ca322d12c4544f659e5a29 (patch) | |
tree | 78c6f404e0c866d5038c3ddee96ab829e6fd1847 /source/blender/depsgraph | |
parent | c3e2b40a915f430cb8c58d8e6367a85ae278b0d5 (diff) |
Depsgraph: Build all type of IDs for modifiers and constraints
It was missing handling of collections there, which caused collection
used for smoke colliders to not be in the dependency graph.
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_nodes.cc | 16 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_relations.cc | 24 |
2 files changed, 17 insertions, 23 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index c705f229669..adf67c5a8b1 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -412,6 +412,9 @@ void DepsgraphNodeBuilder::build_id(ID *id) return; } switch (GS(id->name)) { + case ID_AC: + build_action((bAction *)id); + break; case ID_AR: build_armature((bArmature *)id); break; @@ -1663,17 +1666,15 @@ void DepsgraphNodeBuilder::modifier_walk(void *user_data, } switch (GS(id->name)) { case ID_OB: - /* TODO(sergey): Use visibility of owner of modifier stack. */ + /* Special case for object, so we take owner visibility into + * account. */ data->builder->build_object(-1, (Object *)id, DEG_ID_LINKED_INDIRECTLY, data->is_parent_visible); break; - case ID_TE: - data->builder->build_texture((Tex *)id); - break; default: - /* pass */ + data->builder->build_id(id); break; } } @@ -1690,14 +1691,15 @@ void DepsgraphNodeBuilder::constraint_walk(bConstraint * /*con*/, } switch (GS(id->name)) { case ID_OB: - /* TODO(sergey): Use visibility of owner of modifier stack. */ + /* Special case for object, so we take owner visibility into + * account. */ data->builder->build_object(-1, (Object *)id, DEG_ID_LINKED_INDIRECTLY, data->is_parent_visible); break; default: - /* pass */ + data->builder->build_id(id); break; } } diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index b6eb0af589c..7a26121801a 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -427,6 +427,9 @@ void DepsgraphRelationBuilder::build_id(ID *id) return; } switch (GS(id->name)) { + case ID_AC: + build_action((bAction *)id); + break; case ID_AR: build_armature((bArmature *)id); break; @@ -2510,17 +2513,7 @@ void DepsgraphRelationBuilder::modifier_walk(void *user_data, if (id == NULL) { return; } - switch (GS(id->name)) { - case ID_OB: - data->builder->build_object(NULL, (Object *)id); - break; - case ID_TE: - data->builder->build_texture((Tex *)id); - break; - default: - /* pass */ - break; - } + data->builder->build_id(id); } void DepsgraphRelationBuilder::constraint_walk(bConstraint * /*con*/, @@ -2529,12 +2522,11 @@ void DepsgraphRelationBuilder::constraint_walk(bConstraint * /*con*/, void *user_data) { BuilderWalkUserData *data = (BuilderWalkUserData *)user_data; - if (*idpoin) { - ID *id = *idpoin; - if (GS(id->name) == ID_OB) { - data->builder->build_object(NULL, (Object *)id); - } + ID *id = *idpoin; + if (id == NULL) { + return; } + data->builder->build_id(id); } } // namespace DEG |