Commit: 70d0605dc01d2da86fc89ca4dc97e31a6e0687bc
Author: Sergey Sharybin
Date:   Thu Jan 22 18:18:36 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rB70d0605dc01d2da86fc89ca4dc97e31a6e0687bc

Depsgraph: Fix uninitialized bone matrix used for parents

Issue was caused by bone matrix calculated in pose flush, which made
it so BONE_DONE does not guaranteed matricies to be correct.

===================================================================

M       source/blender/blenkernel/BKE_armature.h
M       source/blender/blenkernel/intern/armature_update.c
M       source/blender/depsgraph/intern/depsgraph_build_nodes.cpp

===================================================================

diff --git a/source/blender/blenkernel/BKE_armature.h 
b/source/blender/blenkernel/BKE_armature.h
index ce7b95e..ac409ae 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -170,6 +170,9 @@ void BKE_pose_constraints_evaluate(struct EvaluationContext 
*eval_ctx,
                                    struct Object *ob,
                                    struct bPoseChannel *pchan);
 
+void BKE_pose_bone_done(struct EvaluationContext *eval_ctx,
+                        struct bPoseChannel *pchan);
+
 void BKE_pose_iktree_evaluate(struct EvaluationContext *eval_ctx,
                               struct Scene *scene,
                               struct Object *ob,
diff --git a/source/blender/blenkernel/intern/armature_update.c 
b/source/blender/blenkernel/intern/armature_update.c
index fb6e9b7..44c6871 100644
--- a/source/blender/blenkernel/intern/armature_update.c
+++ b/source/blender/blenkernel/intern/armature_update.c
@@ -636,6 +636,16 @@ void BKE_pose_constraints_evaluate(EvaluationContext 
*UNUSED(eval_ctx),
        }
 }
 
+void BKE_pose_bone_done(EvaluationContext *UNUSED(eval_ctx),
+                        bPoseChannel *pchan)
+{
+       float imat[4][4];
+       if (pchan->bone) {
+               invert_m4_m4(imat, pchan->bone->arm_mat);
+               mul_m4_m4m4(pchan->chan_mat, pchan->pose_mat, imat);
+       }
+}
+
 void BKE_pose_iktree_evaluate(EvaluationContext *UNUSED(eval_ctx),
                               Scene *scene,
                               Object *ob,
@@ -661,21 +671,10 @@ void BKE_pose_eval_flush(EvaluationContext 
*UNUSED(eval_ctx),
                          Object *ob,
                          bPose *UNUSED(pose))
 {
-       bPoseChannel *pchan;
-       float imat[4][4];
        float ctime = BKE_scene_frame_get(scene); /* not accurate... */
        DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
        BLI_assert(ob->type == OB_ARMATURE);
 
        /* 6. release the IK tree */
        BIK_release_tree(scene, ob, ctime);
-
-       /* calculating deform matrices */
-       for (pchan = ob->pose->chanbase.first; pchan != NULL; pchan = 
pchan->next)
-       {
-               if (pchan->bone) {
-                       invert_m4_m4(imat, pchan->bone->arm_mat);
-                       mul_m4_m4m4(pchan->chan_mat, pchan->pose_mat, imat);
-               }
-       }
 }
diff --git a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp 
b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
index e0eeeba..b1f3a72 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
@@ -615,7 +615,7 @@ void DepsgraphNodeBuilder::build_rig(Scene *scene, Object 
*ob)
                                   DEG_OPCODE_BONE_READY);
                
                add_operation_node(&ob->id, DEPSNODE_TYPE_BONE, pchan->name,
-                                  DEPSOP_TYPE_POST, NULL, // XXX: 
BKE_eval_bone_done ?
+                                  DEPSOP_TYPE_POST, 
function_bind(BKE_pose_bone_done, _1, pchan),
                                   DEG_OPCODE_BONE_DONE);
                
                /* constraints */

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to