From 9a9ca5e40bd88a5444ca322d12c4544f659e5a29 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 15 Nov 2018 12:47:58 +0100 Subject: 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. --- .../depsgraph/intern/builder/deg_builder_nodes.cc | 16 ++++++++------- .../intern/builder/deg_builder_relations.cc | 24 ++++++++-------------- 2 files changed, 17 insertions(+), 23 deletions(-) (limited to 'source/blender/depsgraph') 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 -- cgit v1.2.3