[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