summaryrefslogtreecommitdiff
path: root/src/game.cpp
diff options
context:
space:
mode:
authorCraig Robbins <kde.psych@gmail.com>2014-11-01 12:36:03 +1000
committerRealBadAngel <maciej.kasatkin@o2.pl>2014-11-02 02:20:06 +0100
commitdfd15fd1d90a89b6cd66ce42fb4e93d7292b8298 (patch)
tree2584a8a4e0766d24de34bf77cc8326aaef330927 /src/game.cpp
parent429ecb2b94a66a11cf06be7303d05aa2038d19d2 (diff)
downloadminetest-dfd15fd1d90a89b6cd66ce42fb4e93d7292b8298.tar.gz
minetest-dfd15fd1d90a89b6cd66ce42fb4e93d7292b8298.tar.bz2
minetest-dfd15fd1d90a89b6cd66ce42fb4e93d7292b8298.zip
Modified dtime calculation method in limitFps()
Diffstat (limited to 'src/game.cpp')
-rw-r--r--src/game.cpp21
1 files changed, 19 insertions, 2 deletions
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
}