diff options
Diffstat (limited to 'source')
4 files changed, 14 insertions, 8 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_map.cc b/source/blender/depsgraph/intern/builder/deg_builder_map.cc index 67cb04d1b98..218483d1dc5 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_map.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_map.cc @@ -33,6 +33,8 @@ #include "BLI_utildefines.h" #include "BLI_ghash.h" +#include "DNA_ID.h" + namespace DEG { BuilderMap::BuilderMap() { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc index 208462713a5..c48381481f5 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc @@ -166,7 +166,7 @@ void DepsgraphNodeBuilder::build_rig(Object *object) * mechanism in-between here to ensure that we can use same rig * multiple times in same scene. */ - if (!built_map_.checkIsBuilt(armature)) { + if (!built_map_.checkIsBuiltAndTag(armature)) { build_animdata(&armature->id); /* Make sure pose is up-to-date with armature updates. */ add_operation_node(&armature->id, diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 45e05c6f928..4dfcf5229e3 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -539,7 +539,9 @@ void DepsgraphRelationBuilder::build_object_data(Object *object) } ID *obdata_id = (ID *)object->data; /* Object data animation. */ - build_animdata(obdata_id); + if (!built_map_.checkIsBuilt(obdata_id)) { + build_animdata(obdata_id); + } /* type-specific data. */ switch (object->type) { case OB_MESH: @@ -557,7 +559,7 @@ void DepsgraphRelationBuilder::build_object_data(Object *object) build_proxy_rig(object); } else { - build_rig(object); + build_rig(object); } break; case OB_LAMP: diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc index 126aa85edd3..a9895eb3af1 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc @@ -317,11 +317,13 @@ void DepsgraphRelationBuilder::build_rig(Object *object) add_relation(init_ik_key, flush_key, "Pose Init IK -> Pose Cleanup"); /* Make sure pose is up-to-date with armature updates. */ - OperationKey armature_key(&arm->id, - DEG_NODE_TYPE_PARAMETERS, - DEG_OPCODE_PLACEHOLDER, - "Armature Eval"); - add_relation(armature_key, init_key, "Data dependency"); + if (!built_map_.checkIsBuiltAndTag(arm)) { + OperationKey armature_key(&arm->id, + DEG_NODE_TYPE_PARAMETERS, + DEG_OPCODE_PLACEHOLDER, + "Armature Eval"); + add_relation(armature_key, init_key, "Data dependency"); + } /* IK Solvers... * - These require separate processing steps are pose-level |