diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-03-13 18:57:27 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-03-13 19:26:17 +0300 |
commit | 4e171975979039a22f57b852447811b07a48d43b (patch) | |
tree | b05061b4f6fd391a7b3df6a31acb103344e76ae9 /source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc | |
parent | f990a1a6cc477ebbe85b4df281afbcda7b9633a1 (diff) |
Fix T62521: Fake dependency cycle with spline IK
The core was hooking up relation to a wrong operation, in an
attempt to cause proper full update of the pose (since there
is no intermediate state stored anywhere). This is now done
as a part of flush_handle_component_node(), so can properly
route more granular relation.
This fixes the crash which was caused by an access of partially
evaluated data by solving the fake cycle. However, if there
is a real cycle involved the code will still not survive, but
this is more generic issue (which also includes modifiers
for meshes and curves).
Reviewers: brecht
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D4509
Diffstat (limited to 'source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc | 8 |
1 files changed, 1 insertions, 7 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 e3a2f8d786a..9b266041cc1 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc @@ -260,14 +260,8 @@ void DepsgraphRelationBuilder::build_splineik_pose(Object *object, RELATION_FLAG_GODMODE); /* Attach path dependency to solver. */ if (data->tar != NULL) { - /* TODO(sergey): For until we'll store partial matricies in the - * depsgraph, we create dependency between target object and pose eval - * component. See IK pose for a bit more information. */ - /* TODO: the bigggest point here is that we need the curve PATH and not - * just the general geometry. */ ComponentKey target_key(&data->tar->id, NodeType::GEOMETRY); - ComponentKey pose_key(&object->id, NodeType::EVAL_POSE); - add_relation(target_key, pose_key, "Curve.Path -> Spline IK"); + add_relation(target_key, init_ik_key, "Curve.Path -> Spline IK"); } pchan->flag |= POSE_DONE; OperationKey final_transforms_key( |