Depsgraph: Ensure solver cleanup order

Ensure that pose cleanup is never run before all IK solvers are finished.
This commit is contained in:
2018-11-22 15:52:17 +01:00
parent 60857cdb79
commit 6a3451fe4e

View File

@@ -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