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>2012-10-03 12:51:05 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-10-03 12:51:05 +0400
commit98698753b15a172a0605b0b76f3652f36a63d8a2 (patch)
treea5c3791f074a086e2231afee550ad4ffb3b10bfd
parent916a58f4e09e2fbb4be9a79517b39e9a086fa199 (diff)
Fix #32742: Motion path calculation on linked armatures locks up Blender
Issue was happening when linking armature object and making proxy and was caused by not copying visualization settings in BKE_pose_copy_data. This lead to deadlocks in motion path drawing code. After discussion with Campbell decided it is crucial fix since it fixes bug appearing in really common scenario of using armatures.
-rw-r--r--source/blender/blenkernel/intern/action.c1
-rw-r--r--source/blender/blenloader/intern/readfile.c16
2 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 925658b84f4..66df7eccbd0 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -539,6 +539,7 @@ void BKE_pose_copy_data(bPose **dst, bPose *src, int copycon)
outPose->iksolver = src->iksolver;
outPose->ikdata = NULL;
outPose->ikparam = MEM_dupallocN(src->ikparam);
+ outPose->avs = src->avs;
for (pchan = outPose->chanbase.first; pchan; pchan = pchan->next) {
/* TODO: rename this argument... */
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 80943c2858b..97aa21cea40 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8008,6 +8008,22 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
+ /* correction for files saved in blender version when BKE_pose_copy_data
+ * didn't copy animation visualization, which lead to deadlocks on motion
+ * path calculation for proxied armatures, see [#32742]
+ */
+ if (main->versionfile < 264) {
+ Object *ob;
+
+ for (ob = main->object.first; ob; ob = ob->id.next) {
+ if (ob->pose) {
+ if (ob->pose->avs.path_step == 0) {
+ animviz_settings_init(&ob->pose->avs);
+ }
+ }
+ }
+ }
+
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */