diff options
author | Bastien Montagne <bastien@blender.org> | 2020-10-22 16:14:28 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2020-10-22 16:22:56 +0300 |
commit | 992a88b38b40ab09503b579e7e458ef782e524ea (patch) | |
tree | 707808b4e79761af55065bbd80e4f38473ea5ade /source/blender | |
parent | 658370e9e1c213455b3f3905a72f9965e807086e (diff) |
Pose: Add a 'pose_ensure' new utils that only rebuilds if needed.
Avoids having to spread the check logic everywhere in the code.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_armature.h | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/armature.c | 21 |
2 files changed, 20 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h index 4e8775aefb3..db44a771095 100644 --- a/source/blender/blenkernel/BKE_armature.h +++ b/source/blender/blenkernel/BKE_armature.h @@ -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, diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 7b8ed47c513..4aa328fcb22 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -2573,6 +2573,19 @@ 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->pose == NULL) || (ob->pose->flag & POSE_RECALC)) { + BKE_pose_rebuild(bmain, ob, arm, do_id_user); + } +} + /** \} */ /* -------------------------------------------------------------------- */ @@ -2711,11 +2724,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... */ |