Modified dtime calculation method in limitFps()
authorCraig Robbins <kde.psych@gmail.com>
Sat, 1 Nov 2014 02:36:03 +0000 (12:36 +1000)
committerRealBadAngel <maciej.kasatkin@o2.pl>
Sun, 2 Nov 2014 01:20:06 +0000 (02:20 +0100)
src/game.cpp

index 03f526166c098ef909fca3ce4cae5661b6a00884..48d43c9f7e681fb42d523acbc7090a173272c74e 100644 (file)
@@ -3882,7 +3882,7 @@ inline void MinetestApp::limitFps(FpsControl *params, f32 *dtime)
 
        u32 last_time = params->last_time;
 
-       if (time > last_time)   // Make sure last_time hasn't overflowed
+       if (time > last_time) // Make sure time hasn't overflowed
                params->busy_time = time - last_time;
        else
                params->busy_time = 0;
@@ -3894,10 +3894,26 @@ inline void MinetestApp::limitFps(FpsControl *params, f32 *dtime)
        if (params->busy_time < frametime_min) {
                params->sleep_time = frametime_min - params->busy_time;
                device->sleep(params->sleep_time);
+               time += params->sleep_time;
        } else {
                params->sleep_time = 0;
        }
 
+       if (time > last_time) // Checking for overflow
+               *dtime = (time - last_time) / 1000.0;
+       else
+               *dtime = 0.03; // Choose 30fps as fallback in overflow case
+
+       params->last_time = time;
+
+#if 0
+
+       /* This is the old method for calculating new_time and dtime, and seems
+        * like overkill considering timings are messed up by expected variation
+        * in execution speed in other places anyway. (This has nothing to do with
+        * WINE... the new method above calculates dtime based on sleep_time)
+        */
+
        // Necessary for device->getTimer()->getTime()
        device->run();
        time = device->getTimer()->getTime();
@@ -3905,9 +3921,10 @@ inline void MinetestApp::limitFps(FpsControl *params, f32 *dtime)
        if (time > last_time)   // Make sure last_time hasn't overflowed
                *dtime = (time - last_time) / 1000.0;
        else
-               *dtime = 0;
+               *dtime = 0.033;
 
        params->last_time = time;
+#endif
 }