Pose: Add a 'pose_ensure' new utils that only rebuilds if needed.
Avoids having to spread the check logic everywhere in the code.
This commit is contained in:
parent
cf6c076046
commit
fff08e81ea
|
@ -180,6 +180,10 @@ void BKE_pose_rebuild(struct Main *bmain,
|
|||
struct Object *ob,
|
||||
struct bArmature *arm,
|
||||
const bool do_id_user);
|
||||
void BKE_pose_ensure(struct Main *bmain,
|
||||
struct Object *ob,
|
||||
struct bArmature *arm,
|
||||
const bool do_id_user);
|
||||
void BKE_pose_where_is(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob);
|
||||
void BKE_pose_where_is_bone(struct Depsgraph *depsgraph,
|
||||
struct Scene *scene,
|
||||
|
|
|
@ -2573,6 +2573,20 @@ void BKE_pose_rebuild(Main *bmain, Object *ob, bArmature *arm, const bool do_id_
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures object's pose is rebuilt if needed.
|
||||
*
|
||||
* \param bmain: May be NULL, only used to tag depsgraph as being dirty...
|
||||
*/
|
||||
void BKE_pose_ensure(Main *bmain, Object *ob, bArmature *arm, const bool do_id_user)
|
||||
{
|
||||
BLI_assert(!ELEM(NULL, arm, ob));
|
||||
if (ob->type == OB_ARMATURE && ((ob->pose == NULL) || (ob->pose->flag & POSE_RECALC))) {
|
||||
BLI_assert(GS(arm->id.name) == ID_AR);
|
||||
BKE_pose_rebuild(bmain, ob, arm, do_id_user);
|
||||
}
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
@ -2711,11 +2725,9 @@ void BKE_pose_where_is(struct Depsgraph *depsgraph, Scene *scene, Object *ob)
|
|||
if (ELEM(NULL, arm, scene)) {
|
||||
return;
|
||||
}
|
||||
if ((ob->pose == NULL) || (ob->pose->flag & POSE_RECALC)) {
|
||||
/* WARNING! passing NULL bmain here means we won't tag depsgraph's as dirty -
|
||||
* hopefully this is OK. */
|
||||
BKE_pose_rebuild(NULL, ob, arm, true);
|
||||
}
|
||||
/* WARNING! passing NULL bmain here means we won't tag depsgraph's as dirty -
|
||||
* hopefully this is OK. */
|
||||
BKE_pose_ensure(NULL, ob, arm, true);
|
||||
|
||||
ctime = BKE_scene_frame_get(scene); /* not accurate... */
|
||||
|
||||
|
|
Loading…
Reference in New Issue