|
|
@@ -159,7 +159,8 @@ void print_help (const char* route)
|
|
|
<< " --silent\t\tMutes all the sound the wallpaper might produce" << std::endl
|
|
|
<< " --dir <folder>\tLoads an uncompressed background from the given <folder>" << std::endl
|
|
|
<< " --pkg <folder>\tLoads a scene.pkg file from the given <folder>" << std::endl
|
|
|
- << " --screen-root <screen name>\tDisplay as screen's background" << std::endl;
|
|
|
+ << " --screen-root <screen name>\tDisplay as screen's background" << std::endl
|
|
|
+ << " --fps <maximum-fps>\tLimits the FPS to the given number, useful to keep battery consumption low" << std::endl;
|
|
|
}
|
|
|
|
|
|
std::string stringPathFixes(const std::string& s){
|
|
|
@@ -178,6 +179,7 @@ std::string stringPathFixes(const std::string& s){
|
|
|
int main (int argc, char* argv[])
|
|
|
{
|
|
|
int mode = 0;
|
|
|
+ int max_fps = 30;
|
|
|
bool audio_support = true;
|
|
|
std::string path;
|
|
|
|
|
|
@@ -187,14 +189,15 @@ int main (int argc, char* argv[])
|
|
|
{"screen-root", required_argument, 0, 'r'},
|
|
|
{"pkg", required_argument, 0, 'p'},
|
|
|
{"dir", required_argument, 0, 'd'},
|
|
|
- {"silent", optional_argument, 0, 's'},
|
|
|
- {"help", optional_argument, 0, 'h'},
|
|
|
- {nullptr, 0, 0, 0}
|
|
|
+ {"silent", no_argument, 0, 's'},
|
|
|
+ {"help", no_argument, 0, 'h'},
|
|
|
+ {"fps", required_argument, 0, 'f'},
|
|
|
+ {nullptr, 0, 0, 0}
|
|
|
};
|
|
|
|
|
|
while (true)
|
|
|
{
|
|
|
- int c = getopt_long (argc, argv, "r:p:d:sh", long_options, &option_index);
|
|
|
+ int c = getopt_long (argc, argv, "r:p:d:shf:", long_options, &option_index);
|
|
|
|
|
|
if (c == -1)
|
|
|
break;
|
|
|
@@ -224,6 +227,10 @@ int main (int argc, char* argv[])
|
|
|
print_help (argv [0]);
|
|
|
return 0;
|
|
|
|
|
|
+ case 'f':
|
|
|
+ max_fps = atoi (optarg);
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
@@ -302,18 +309,21 @@ int main (int argc, char* argv[])
|
|
|
// register nodes
|
|
|
WallpaperEngine::video::renderer::queueNode (wp_project->getScene ());
|
|
|
|
|
|
- int32_t lastTime = 0;
|
|
|
- int32_t minimumTime = 1000 / 90;
|
|
|
- int32_t currentTime = 0;
|
|
|
+ irr::u32 lastTime = 0;
|
|
|
+ irr::u32 minimumTime = 1000 / max_fps;
|
|
|
+ irr::u32 currentTime = 0;
|
|
|
+
|
|
|
+ irr::u32 startTime = 0;
|
|
|
+ irr::u32 endTime = 0;
|
|
|
|
|
|
while (IrrlichtContext->getDevice ()->run () && IrrlichtContext && IrrlichtContext->getDevice ())
|
|
|
{
|
|
|
// if (device->isWindowActive ())
|
|
|
{
|
|
|
- currentTime = IrrlichtContext->getDevice ()->getTimer ()->getTime ();
|
|
|
+ currentTime = startTime = IrrlichtContext->getDevice ()->getTimer ()->getTime ();
|
|
|
g_Time = currentTime / 1000.0f;
|
|
|
|
|
|
- if (currentTime - lastTime > minimumTime)
|
|
|
+ if (Viewports.size () > 0)
|
|
|
{
|
|
|
std::vector<irr::core::rect<irr::s32>>::iterator cur = Viewports.begin ();
|
|
|
std::vector<irr::core::rect<irr::s32>>::iterator end = Viewports.end ();
|
|
|
@@ -324,13 +334,15 @@ int main (int argc, char* argv[])
|
|
|
IrrlichtContext->getDevice ()->getVideoDriver ()->setViewPort (*cur);
|
|
|
WallpaperEngine::video::renderer::render ();
|
|
|
}
|
|
|
-
|
|
|
- lastTime = currentTime;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- IrrlichtContext->getDevice ()->sleep (1, false);
|
|
|
+ WallpaperEngine::video::renderer::render ();
|
|
|
}
|
|
|
+
|
|
|
+ endTime = IrrlichtContext->getDevice ()->getTimer ()->getTime ();
|
|
|
+
|
|
|
+ IrrlichtContext->getDevice ()->sleep (minimumTime - (endTime - startTime), false);
|
|
|
}
|
|
|
}
|
|
|
|