[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54122] trunk/blender/source/blender: Fix drivers and shape keys not handling subframes / frame mapping properly .
Brecht Van Lommel
brechtvanlommel at pandora.be
Sun Jan 27 17:45:01 CET 2013
Revision: 54122
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54122
Author: blendix
Date: 2013-01-27 16:45:00 +0000 (Sun, 27 Jan 2013)
Log Message:
-----------
Fix drivers and shape keys not handling subframes / frame mapping properly.
Change Scene.frame_set so that it ensures subframe in range [0,1[ as Blender
expects, otherwise some things like physics point cache lookups don't get
evaluated properly.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/armature.c
trunk/blender/source/blender/blenkernel/intern/key.c
trunk/blender/source/blender/blenkernel/intern/object.c
trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c 2013-01-27 15:12:52 UTC (rev 54121)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c 2013-01-27 16:45:00 UTC (rev 54122)
@@ -2258,7 +2258,7 @@
{
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) {
Modified: trunk/blender/source/blender/blenkernel/intern/key.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/key.c 2013-01-27 15:12:52 UTC (rev 54121)
+++ trunk/blender/source/blender/blenkernel/intern/key.c 2013-01-27 16:45:00 UTC (rev 54122)
@@ -1065,7 +1065,7 @@
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 @@
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 @@
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 @@
}
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);
Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c 2013-01-27 15:12:52 UTC (rev 54121)
+++ trunk/blender/source/blender/blenkernel/intern/object.c 2013-01-27 16:45:00 UTC (rev 54122)
@@ -1808,7 +1808,7 @@
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(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 @@
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 @@
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);
Modified: trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene_api.c 2013-01-27 15:12:52 UTC (rev 54121)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene_api.c 2013-01-27 16:45:00 UTC (rev 54122)
@@ -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);
More information about the Bf-blender-cvs
mailing list