Depsgraph: Assert that pchan index is always valid

This commit is contained in:
Sergey Sharybin 2018-04-04 10:35:32 +02:00
parent f913e69093
commit 909efe6be5
1 changed files with 14 additions and 10 deletions

View File

@ -551,6 +551,15 @@ void BKE_splineik_execute_tree(Scene *scene, Object *ob, bPoseChannel *pchan_roo
/* *************** Depsgraph evaluation callbacks ************ */
BLI_INLINE bPoseChannel *pose_pchan_get_indexed(Object *ob, int pchan_index)
{
bPose *pose = ob->pose;
BLI_assert(pose != NULL);
BLI_assert(pchan_index >= 0);
BLI_assert(pchan_index < MEM_allocN_len(pose->chan_array) / sizeof(bPoseChannel *));
return pose->chan_array[pchan_index];
}
void BKE_pose_eval_init(EvaluationContext *UNUSED(eval_ctx),
Scene *UNUSED(scene),
Object *ob)
@ -606,8 +615,7 @@ void BKE_pose_eval_bone(EvaluationContext *UNUSED(eval_ctx),
Object *ob,
int pchan_index)
{
BLI_assert(ob->pose != NULL);
bPoseChannel *pchan = ob->pose->chan_array[pchan_index];
bPoseChannel *pchan = pose_pchan_get_indexed(ob, pchan_index);
DEG_debug_print_eval_subdata(
__func__, ob->id.name, ob, "pchan", pchan->name, pchan);
BLI_assert(ob->type == OB_ARMATURE);
@ -644,8 +652,7 @@ void BKE_pose_constraints_evaluate(EvaluationContext *UNUSED(eval_ctx),
Object *ob,
int pchan_index)
{
BLI_assert(ob->pose != NULL);
bPoseChannel *pchan = ob->pose->chan_array[pchan_index];
bPoseChannel *pchan = pose_pchan_get_indexed(ob, pchan_index);
DEG_debug_print_eval_subdata(
__func__, ob->id.name, ob, "pchan", pchan->name, pchan);
bArmature *arm = (bArmature *)ob->data;
@ -667,8 +674,7 @@ void BKE_pose_bone_done(EvaluationContext *UNUSED(eval_ctx),
struct Object *ob,
int pchan_index)
{
BLI_assert(ob->pose != NULL);
bPoseChannel *pchan = ob->pose->chan_array[pchan_index];
bPoseChannel *pchan = pose_pchan_get_indexed(ob, pchan_index);
float imat[4][4];
DEG_debug_print_eval(__func__, pchan->name, pchan);
if (pchan->bone) {
@ -682,8 +688,7 @@ void BKE_pose_iktree_evaluate(EvaluationContext *UNUSED(eval_ctx),
Object *ob,
int rootchan_index)
{
BLI_assert(ob->pose != NULL);
bPoseChannel *rootchan = ob->pose->chan_array[rootchan_index];
bPoseChannel *rootchan = pose_pchan_get_indexed(ob, rootchan_index);
DEG_debug_print_eval_subdata(
__func__, ob->id.name, ob, "rootchan", rootchan->name, rootchan);
BLI_assert(ob->type == OB_ARMATURE);
@ -701,8 +706,7 @@ void BKE_pose_splineik_evaluate(EvaluationContext *UNUSED(eval_ctx),
int rootchan_index)
{
BLI_assert(ob->pose != NULL);
bPoseChannel *rootchan = ob->pose->chan_array[rootchan_index];
bPoseChannel *rootchan = pose_pchan_get_indexed(ob, rootchan_index);
DEG_debug_print_eval_subdata(
__func__, ob->id.name, ob, "rootchan", rootchan->name, rootchan);
BLI_assert(ob->type == OB_ARMATURE);