diff options
author | ShadowNinja <noreply@gmail.com> | 2013-03-17 11:53:04 -0400 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2013-03-17 12:13:48 -0400 |
commit | 5f88cd98ada8fd59e4db68e969e17c09342c4ece (patch) | |
tree | 8e1bf91c23deec83bad359dc602220625fb2ab0d /src | |
parent | 7f51b2da28e004b82fc6835e5257e619da4666b2 (diff) | |
download | minetest-5f88cd98ada8fd59e4db68e969e17c09342c4ece.tar.gz minetest-5f88cd98ada8fd59e4db68e969e17c09342c4ece.tar.bz2 minetest-5f88cd98ada8fd59e4db68e969e17c09342c4ece.zip |
Add FPS limit to menu clouds
Diffstat (limited to 'src')
-rw-r--r-- | src/main.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/main.cpp b/src/main.cpp index e5aa3017d..e4dbb8a54 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1597,7 +1597,7 @@ int main(int argc, char *argv[]) if(skip_main_menu == false) { video::IVideoDriver* driver = device->getVideoDriver(); - + float fps_max = g_settings->getFloat("fps_max"); infostream<<"Waiting for other menus"<<std::endl; while(device->run() && kill == false) { @@ -1690,8 +1690,28 @@ int main(int argc, char *argv[]) // On some computers framerate doesn't seem to be // automatically limited - if (!cloud_menu_background) + if (cloud_menu_background) { + // Time of frame without fps limit + float busytime; + u32 busytime_u32; + // not using getRealTime is necessary for wine + u32 time = device->getTimer()->getTime(); + if(time > lasttime) + busytime_u32 = time - lasttime; + else + busytime_u32 = 0; + busytime = busytime_u32 / 1000.0; + + // FPS limiter + u32 frametime_min = 1000./fps_max; + + if(busytime_u32 < frametime_min) { + u32 sleeptime = frametime_min - busytime_u32; + device->sleep(sleeptime); + } + } else { sleep_ms(25); + } } infostream<<"Dropping main menu"<<std::endl; |