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);


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to