diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index ad14dee168a..3a705a07e22 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -2258,7 +2258,7 @@ static void do_strip_modifiers(Scene *scene, Object *armob, Bone *bone, bPoseCha { bActionModifier *amod; bActionStrip *strip, *strip2; - float scene_cfra = (float)scene->r.cfra; + float scene_cfra = BKE_scene_frame_get(scene); int do_modif; for (strip = armob->nlastrips.first; strip; strip = strip->next) { diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c index 803b1e68915..cb0a11a16e0 100644 --- a/source/blender/blenkernel/intern/key.c +++ b/source/blender/blenkernel/intern/key.c @@ -1065,7 +1065,7 @@ static void do_mesh_key(Scene *scene, Object *ob, Key *key, char *out, const int if (key->slurph && key->type != KEY_RELATIVE) { const float ctime_scaled = key->ctime / 100.0f; float delta = (float)key->slurph / tot; - float cfra = (float)scene->r.cfra + scene->r.subframe; + float cfra = BKE_scene_frame_get(scene); int step, a; if (tot > 100 && slurph_opt) { @@ -1163,7 +1163,7 @@ static void do_curve_key(Scene *scene, Object *ob, Key *key, char *out, const in if (key->slurph && key->type != KEY_RELATIVE) { const float ctime_scaled = key->ctime / 100.0f; float delta = (float)key->slurph / tot; - float cfra = (float)scene->r.cfra + scene->r.subframe; + float cfra = BKE_scene_frame_get(scene); Nurb *nu; int i = 0, remain = 0; int step, a; @@ -1245,7 +1245,7 @@ static void do_latt_key(Scene *scene, Object *ob, Key *key, char *out, const int if (key->slurph && key->type != KEY_RELATIVE) { const float ctime_scaled = key->ctime / 100.0f; float delta = (float)key->slurph / tot; - float cfra = (float)scene->r.cfra + scene->r.subframe; + float cfra = BKE_scene_frame_get(scene); int a; for (a = 0; a < tot; a++, cfra += delta) { @@ -1360,7 +1360,7 @@ float *BKE_key_evaluate_object(Scene *scene, Object *ob, int *r_totelem) } else { /* do shapekey local drivers */ - float ctime = (float)scene->r.cfra + scene->r.subframe; + float ctime = BKE_scene_frame_get(scene); BKE_animsys_evaluate_animdata(scene, &key->id, key->adt, ctime, ADT_RECALC_DRIVERS); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index b5e82586f5a..aac1d9f1f7b 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1808,7 +1808,7 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[4][4]) CLAMP(ctime, 0.0f, 1.0f); } else { - ctime = scene->r.cfra; + ctime = BKE_scene_frame_get(scene); if (IS_EQF(cu->pathlen, 0.0f) == 0) ctime /= cu->pathlen; @@ -2187,7 +2187,7 @@ void BKE_object_where_is_calc_mat4(Scene *scene, Object *ob, float obmat[4][4]) void BKE_object_where_is_calc(struct Scene *scene, Object *ob) { - BKE_object_where_is_calc_time(scene, ob, (float)scene->r.cfra); + BKE_object_where_is_calc_time(scene, ob, BKE_scene_frame_get(scene)); } void BKE_object_where_is_calc_simul(Scene *scene, Object *ob) @@ -2226,7 +2226,7 @@ void BKE_object_where_is_calc_simul(Scene *scene, Object *ob) bConstraintOb *cob; cob = BKE_constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT); - BKE_solve_constraints(&ob->constraints, cob, (float)scene->r.cfra); + BKE_solve_constraints(&ob->constraints, cob, BKE_scene_frame_get(scene)); BKE_constraints_clear_evalob(cob); } } @@ -2670,7 +2670,7 @@ void BKE_object_handle_update(Scene *scene, Object *ob) if (ob->recalc & OB_RECALC_DATA) { ID *data_id = (ID *)ob->data; AnimData *adt = BKE_animdata_from_id(data_id); - float ctime = (float)scene->r.cfra; /* XXX this is bad... */ + float ctime = BKE_scene_frame_get(scene); if (G.debug & G_DEBUG) printf("recalcdata %s\n", ob->id.name + 2); diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index e877367790e..b0df27b957b 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -55,8 +55,10 @@ static void rna_Scene_frame_set(Scene *scene, int frame, float subframe) { - scene->r.cfra = frame; - scene->r.subframe = subframe; + float cfra = (float)frame + subframe; + + scene->r.cfra = floorf(cfra); + scene->r.subframe = cfra - floorf(cfra); CLAMP(scene->r.cfra, MINAFRAME, MAXFRAME); BKE_scene_update_for_newframe(G.main, scene, (1 << 20) - 1);