From: Craig Robbins Date: Sat, 1 Nov 2014 02:36:03 +0000 (+1000) Subject: Modified dtime calculation method in limitFps() X-Git-Tag: 0.4.11~197 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=dfd15fd1d90a89b6cd66ce42fb4e93d7292b8298;p=oweals%2Fminetest.git Modified dtime calculation method in limitFps() --- diff --git a/src/game.cpp b/src/game.cpp index 03f526166..48d43c9f7 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -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 }