summaryrefslogtreecommitdiff
path: root/src/video/allegro_v.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video/allegro_v.cpp')
-rw-r--r--src/video/allegro_v.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp
index 7a51415c7..de329db9e 100644
--- a/src/video/allegro_v.cpp
+++ b/src/video/allegro_v.cpp
@@ -484,13 +484,21 @@ void VideoDriver_Allegro::MainLoop()
}
if (cur_ticks >= next_game_tick || (_fast_forward && !_pause_mode)) {
- next_game_tick = cur_ticks + std::chrono::milliseconds(MILLISECONDS_PER_TICK);
+ if (_fast_forward && !_pause_mode) {
+ next_game_tick = cur_ticks + std::chrono::milliseconds(MILLISECONDS_PER_TICK);
+ } else {
+ next_game_tick += std::chrono::milliseconds(MILLISECONDS_PER_TICK);
+ /* Avoid next_game_tick getting behind more and more if it cannot keep up. */
+ if (next_game_tick < cur_ticks - std::chrono::milliseconds(ALLOWED_DRIFT * MILLISECONDS_PER_TICK)) next_game_tick = cur_ticks;
+ }
GameLoop();
}
if (cur_ticks >= next_draw_tick) {
- next_draw_tick = cur_ticks + std::chrono::milliseconds(MILLISECONDS_PER_TICK);
+ next_draw_tick += std::chrono::milliseconds(MILLISECONDS_PER_TICK);
+ /* Avoid next_draw_tick getting behind more and more if it cannot keep up. */
+ if (next_draw_tick < cur_ticks - std::chrono::microseconds(ALLOWED_DRIFT * MILLISECONDS_PER_TICK)) next_draw_tick = cur_ticks;
bool old_ctrl_pressed = _ctrl_pressed;