Patch by Matt McCutchen to fix active waiting in main loop. (Bug 480)
authorWolfgang Becker <uafr@gmx.de>
Wed, 26 Aug 2009 21:39:05 +0000 (21:39 +0000)
committerWolfgang Becker <uafr@gmx.de>
Wed, 26 Aug 2009 21:39:05 +0000 (21:39 +0000)
SVN-Revision: 5908

src/mainloop.cpp

index 0807a58..444d3d2 100644 (file)
@@ -295,29 +295,32 @@ MainLoop::run(DrawingContext &context)
       elapsed_ticks = 0;
     }
 
+    if(elapsed_ticks < ticks_per_frame)
+      {
+        Uint32 delay_ticks = ticks_per_frame - elapsed_ticks;
+        SDL_Delay(delay_ticks);
+        last_ticks += delay_ticks;
+        elapsed_ticks += delay_ticks;
+      }
+
     int frames = 0;
 
-    if (elapsed_ticks > ticks_per_frame
+    while(elapsed_ticks >= ticks_per_frame && frames < MAX_FRAME_SKIP
       {
-        while(elapsed_ticks > ticks_per_frame && frames < MAX_FRAME_SKIP) 
-          {
-            elapsed_ticks -= ticks_per_frame;
-            float timestep = 1.0 / LOGICAL_FPS;
-            real_time += timestep;
-            timestep *= speed;
-            game_time += timestep;
-
-            process_events();
-            update_gamelogic(timestep);
-            frames += 1;
-          }
-
-        draw(context);
+        elapsed_ticks -= ticks_per_frame;
+        float timestep = 1.0 / LOGICAL_FPS;
+        real_time += timestep;
+        timestep *= speed;
+        game_time += timestep;
+
+        process_events();
+        update_gamelogic(timestep);
+        frames += 1;
       }
 
-    sound_manager->update();
+    draw(context);
 
-    SDL_Delay(0);
+    sound_manager->update();
   }
 }