[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57491] trunk/blender/source/blender: when setting the subframe for large frames (250, 000+) the precision was very poor.

Campbell Barton ideasman42 at gmail.com
Sun Jun 16 06:06:39 CEST 2013


Revision: 57491
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57491
Author:   campbellbarton
Date:     2013-06-16 04:06:38 +0000 (Sun, 16 Jun 2013)
Log Message:
-----------
when setting the subframe for large frames (250,000+) the precision was very poor.
now use double precision when combining the frame+subframe.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_scene.h
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_scene.h	2013-06-16 03:31:15 UTC (rev 57490)
+++ trunk/blender/source/blender/blenkernel/BKE_scene.h	2013-06-16 04:06:38 UTC (rev 57491)
@@ -99,6 +99,7 @@
 
 float BKE_scene_frame_get(struct Scene *scene);
 float BKE_scene_frame_get_from_ctime(struct Scene *scene, const float frame);
+void  BKE_scene_frame_set(struct Scene *scene, double cfra);
 
 void BKE_scene_update_tagged(struct Main *bmain, struct Scene *sce);
 

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2013-06-16 03:31:15 UTC (rev 57490)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2013-06-16 04:06:38 UTC (rev 57491)
@@ -1045,6 +1045,21 @@
 	return ctime;
 }
 
+/**
+ * Sets the frame int/float components.
+ */
+void BKE_scene_frame_set(struct Scene *scene, double cfra)
+{
+	double intpart;
+	scene->r.subframe = modf(cfra, &intpart);
+	scene->r.cfra = (int)intpart;
+
+	if (cfra < 0.0) {
+		scene->r.cfra -= 1;
+		scene->r.subframe = 1.0f + scene->r.subframe;
+	}
+}
+
 /* drivers support/hacks 
  *  - this method is called from scene_update_tagged_recursive(), so gets included in viewport + render
  *	- these are always run since the depsgraph can't handle non-object data

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene_api.c	2013-06-16 03:31:15 UTC (rev 57490)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene_api.c	2013-06-16 04:06:38 UTC (rev 57491)
@@ -56,12 +56,11 @@
 
 static void rna_Scene_frame_set(Scene *scene, int frame, float subframe)
 {
-	float cfra = (float)frame + subframe;
+	double cfra = (double)frame + (double)subframe;
 
-	scene->r.cfra = floorf(cfra);
-	scene->r.subframe = cfra - floorf(cfra);
-	
-	CLAMP(scene->r.cfra, MINAFRAME, MAXFRAME);
+	CLAMP(cfra, MINAFRAME, MAXFRAME);
+	BKE_scene_frame_set(scene, cfra);
+
 	BKE_scene_update_for_newframe(G.main, scene, (1 << 20) - 1);
 	BKE_scene_camera_switch_update(scene);
 

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2013-06-16 03:31:15 UTC (rev 57490)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2013-06-16 04:06:38 UTC (rev 57491)
@@ -1113,7 +1113,6 @@
 
 static void do_render_3d(Render *re)
 {
-	float cfra;
 	int cfra_backup;
 
 	/* try external */
@@ -1126,9 +1125,7 @@
 	/* add motion blur and fields offset to frames */
 	cfra_backup = re->scene->r.cfra;
 
-	cfra = re->scene->r.cfra + re->mblur_offs + re->field_offs;
-	re->scene->r.cfra = floorf(cfra);
-	re->scene->r.subframe = cfra - floorf(cfra);
+	BKE_scene_frame_set(re->scene, (double)re->scene->r.cfra + (double)re->mblur_offs + (double)re->field_offs);
 
 	/* lock drawing in UI during data phase */
 	if (re->draw_lock)




More information about the Bf-blender-cvs mailing list