diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-05-31 15:27:37 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-05-31 19:07:55 +0300 |
commit | 59a516913e599ce29754d361246a0d8cb92bd314 (patch) | |
tree | 326c0babbc13e6168712cf34672b8ce6bc98d332 /source/blender/depsgraph | |
parent | b5b1f9d11c86032fd2b7a61ce39b8d62e1585cef (diff) |
Depsgraph: Copy evaluated data to original datablock
Only do it for active dependency graph.
Currently covers animation, drivers, object and pose channel matricies.
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r-- | source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc index 6bf7e2fe9e5..2789f189f03 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc @@ -510,6 +510,17 @@ void update_particle_system_orig_pointers(const Object *object_orig, } } +void update_pose_orig_pointers(const bPose *pose_orig, bPose *pose_cow) +{ + bPoseChannel *pchan_cow = (bPoseChannel *) pose_cow->chanbase.first; + bPoseChannel *pchan_orig = (bPoseChannel *) pose_orig->chanbase.first; + while (pchan_orig != NULL) { + pchan_cow->orig_pchan = pchan_orig; + pchan_cow = pchan_cow->next; + pchan_orig = pchan_orig->next; + } +} + /* Do some special treatment of data transfer from original ID to it's * CoW complementary part. * @@ -534,6 +545,7 @@ void update_special_pointers(const Depsgraph *depsgraph, if (object_cow->type == OB_ARMATURE) { BKE_pose_remap_bone_pointers((bArmature *)object_cow->data, object_cow->pose); + update_pose_orig_pointers(object_orig->pose, object_cow->pose); } update_particle_system_orig_pointers(object_orig, object_cow); break; |