[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22681] branches/blender2.5/blender/source /blender/windowmanager: 2.5: Animation playback without sync option was slightly slower

Brecht Van Lommel brecht at blender.org
Fri Aug 21 18:28:50 CEST 2009


Revision: 22681
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22681
Author:   blendix
Date:     2009-08-21 18:28:49 +0200 (Fri, 21 Aug 2009)

Log Message:
-----------
2.5: Animation playback without sync option was slightly slower
than expected time, even when it could keep up. Changed the WM
timer logic a bit to always target the next frame time exactly,

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_types.h	2009-08-21 14:33:53 UTC (rev 22680)
+++ branches/blender2.5/blender/source/blender/windowmanager/WM_types.h	2009-08-21 16:28:49 UTC (rev 22681)
@@ -283,6 +283,8 @@
 	double delta;			/* time since previous step in seconds */
 	
 	double ltime;			/* internal, last time timer was activated */
+	double ntime;			/* internal, next time we want to activate the timer */
+	double stime;			/* internal, when the timer started */
 	int sleep;				/* internal, put timers to sleep when needed */
 } wmTimer;
 

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c	2009-08-21 14:33:53 UTC (rev 22680)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c	2009-08-21 16:28:49 UTC (rev 22681)
@@ -26,6 +26,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include <math.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -690,12 +691,13 @@
 		wmTimer *wt;
 		for(wt= win->timers.first; wt; wt= wt->next) {
 			if(wt->sleep==0) {
-				if(wt->timestep < time - wt->ltime) {
+				if(time > wt->ntime) {
 					wmEvent event= *(win->eventstate);
 					
 					wt->delta= time - wt->ltime;
 					wt->duration += wt->delta;
 					wt->ltime= time;
+					wt->ntime= wt->stime + wt->timestep*ceil(wt->duration/wt->timestep);
 					
 					event.type= wt->event_type;
 					event.custom= EVT_DATA_TIMER;
@@ -790,6 +792,8 @@
 	
 	wt->event_type= event_type;
 	wt->ltime= PIL_check_seconds_timer();
+	wt->ntime= wt->ltime + timestep;
+	wt->stime= wt->ltime;
 	wt->timestep= timestep;
 	
 	BLI_addtail(&win->timers, wt);





More information about the Bf-blender-cvs mailing list