[Bf-blender-cvs] [b5973ec] depsgraph_refactor: Depsgraph: Add dirty check for whether bone was updated or not
Sergey Sharybin
noreply at git.blender.org
Mon Jan 26 17:50:26 CET 2015
Commit: b5973ec3d6ed3ba3e07720ba40b6fbec67edbc3f
Author: Sergey Sharybin
Date: Mon Jan 26 21:50:04 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rBb5973ec3d6ed3ba3e07720ba40b6fbec67edbc3f
Depsgraph: Add dirty check for whether bone was updated or not
===================================================================
M source/blender/blenkernel/intern/armature_update.c
===================================================================
diff --git a/source/blender/blenkernel/intern/armature_update.c b/source/blender/blenkernel/intern/armature_update.c
index 0dcd09f..7b12e20 100644
--- a/source/blender/blenkernel/intern/armature_update.c
+++ b/source/blender/blenkernel/intern/armature_update.c
@@ -557,6 +557,11 @@ void BKE_splineik_execute_tree(Scene *scene, Object *ob, bPoseChannel *pchan_roo
/* *************** Depsgraph evaluation callbacks ************ */
+/* XXX: Temp hack for cycles detection! */
+enum {
+ POSE_UNUSED2 = (1 << 4)
+};
+
void BKE_pose_eval_init(EvaluationContext *UNUSED(eval_ctx),
Scene *scene,
Object *ob,
@@ -579,6 +584,7 @@ void BKE_pose_eval_init(EvaluationContext *UNUSED(eval_ctx),
/* 1. clear flags */
for (pchan = pose->chanbase.first; pchan != NULL; pchan = pchan->next) {
pchan->flag &= ~(POSE_DONE | POSE_CHAIN | POSE_IKTREE | POSE_IKSPLINE);
+ pchan->flag &= ~POSE_UNUSED2;
}
/* 2a. construct the IK tree (standard IK) */
@@ -647,6 +653,7 @@ void BKE_pose_bone_done(EvaluationContext *UNUSED(eval_ctx),
invert_m4_m4(imat, pchan->bone->arm_mat);
mul_m4_m4m4(pchan->chan_mat, pchan->pose_mat, imat);
}
+ pchan->flag |= POSE_UNUSED2;
}
void BKE_pose_iktree_evaluate(EvaluationContext *UNUSED(eval_ctx),
@@ -678,6 +685,24 @@ void BKE_pose_eval_flush(EvaluationContext *UNUSED(eval_ctx),
DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
BLI_assert(ob->type == OB_ARMATURE);
+ {
+ bPoseChannel *pchan;
+ for (pchan = ob->pose->chanbase.first;
+ pchan != NULL;
+ pchan = pchan->next)
+ {
+ if ((pchan->flag & POSE_UNUSED2) == 0) {
+ float imat[4][4];
+ printf("ERROR: Pose channel %s did not evaluate, should not happen!\n",
+ pchan->name);
+ if (pchan->bone) {
+ invert_m4_m4(imat, pchan->bone->arm_mat);
+ mul_m4_m4m4(pchan->chan_mat, pchan->pose_mat, imat);
+ }
+ }
+ }
+ }
+
/* 6. release the IK tree */
BIK_release_tree(scene, ob, ctime);
}
More information about the Bf-blender-cvs
mailing list