summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShadowNinja <noreply@gmail.com>2013-03-17 11:53:04 -0400
committerkwolekr <kwolekr@minetest.net>2013-03-17 12:13:48 -0400
commit5f88cd98ada8fd59e4db68e969e17c09342c4ece (patch)
tree8e1bf91c23deec83bad359dc602220625fb2ab0d /src
parent7f51b2da28e004b82fc6835e5257e619da4666b2 (diff)
downloadminetest-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.cpp24
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;