diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-11-22 17:52:17 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-11-22 18:17:18 +0300 |
commit | 6a3451fe4ef3de686b40a6701b8c7085844df1a5 (patch) | |
tree | 2b90912c08ac05adce5f2b6b12a0436b3b7a0c56 /source/blender/depsgraph | |
parent | 60857cdb79ed7ecb636a60092ffd1a0887d63c5c (diff) |
Depsgraph: Ensure solver cleanup order
Ensure that pose cleanup is never run before all IK solvers are finished.
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc | 16 |
1 files changed, 15 insertions, 1 deletions
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 2b4d8d394ab..1abed8bb6a2 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc @@ -93,8 +93,15 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object, DEG_NODE_TYPE_EVAL_POSE, rootchan->name, DEG_OPCODE_POSE_IK_SOLVER); + OperationKey pose_cleanup_key( + &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_CLEANUP); add_relation(pchan_local_key, init_ik_key, "IK Constraint -> Init IK Tree"); add_relation(init_ik_key, solver_key, "Init IK -> IK Solver"); + /* Never cleanup before solver is run. */ + add_relation(solver_key, + pose_cleanup_key, + "IK Solver -> Cleanup", + DEPSREL_FLAG_GODMODE); /* IK target */ /* TODO(sergey): This should get handled as part of the constraint code. */ if (data->tar != NULL) { @@ -254,10 +261,17 @@ void DepsgraphRelationBuilder::build_splineik_pose(Object *object, DEG_NODE_TYPE_EVAL_POSE, rootchan->name, DEG_OPCODE_POSE_SPLINE_IK_SOLVER); + OperationKey pose_cleanup_key( + &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_CLEANUP); /* Solver depends on initialization. */ add_relation(init_ik_key, solver_key, "Init IK -> IK Solver"); + /* Never cleanup before solver is run. */ + add_relation(solver_key, pose_cleanup_key, "IK Solver -> Cleanup"); /* Attach owner to IK Solver. */ - add_relation(transforms_key, solver_key, "Spline IK Solver Owner"); + add_relation(transforms_key, + solver_key, + "Spline IK Solver Owner", + DEPSREL_FLAG_GODMODE); /* Attach path dependency to solver. */ if (data->tar != NULL) { /* TODO(sergey): For until we'll store partial matricies in the |