Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-05-31 15:27:37 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-05-31 19:07:55 +0300
commit59a516913e599ce29754d361246a0d8cb92bd314 (patch)
tree326c0babbc13e6168712cf34672b8ce6bc98d332 /source/blender/depsgraph
parentb5b1f9d11c86032fd2b7a61ce39b8d62e1585cef (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.cc12
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;