mirror of
https://github.com/Almamu/linux-wallpaperengine.git
synced 2025-07-14 05:12:25 +08:00
+ Added FPS capping option for laptops
~ Changed default FPS cap to 30 FPS ~ Fixed bug where the windowed mode wasn't rendering anything Signed-off-by: Alexis Maiquez <almamu@almamu.com>
This commit is contained in:
parent
ce23ca53b1
commit
ec29beca90
@ -78,6 +78,12 @@ Only screens configured with the XRandr extension are supported. To specify the
|
|||||||
|
|
||||||
**IMPORTANT: Right now this doesn't work if there is anything drawing to the background (like a compositor, nautilus, etc)**
|
**IMPORTANT: Right now this doesn't work if there is anything drawing to the background (like a compositor, nautilus, etc)**
|
||||||
|
|
||||||
|
#### 5.4.4. Limiting FPS
|
||||||
|
To reduce the performance hit to your system you can reduce (or increase) the FPS limit with the switch ```--fps```, specially useful for laptops:
|
||||||
|
```
|
||||||
|
./wallengine --fps 30
|
||||||
|
```
|
||||||
|
|
||||||
###### Example background
|
###### Example background
|
||||||
This was the first background to even be compatible with the software. And It's not 100% compatible yet. Both textures and shaders are properly loaded, but there are still particles missing.
|
This was the first background to even be compatible with the software. And It's not 100% compatible yet. Both textures and shaders are properly loaded, but there are still particles missing.
|
||||||
|
|
||||||
|
36
main.cpp
36
main.cpp
@ -152,7 +152,8 @@ void print_help (const char* route)
|
|||||||
<< " --silent\t\tMutes all the sound the wallpaper might produce" << std::endl
|
<< " --silent\t\tMutes all the sound the wallpaper might produce" << std::endl
|
||||||
<< " --dir <folder>\tLoads an uncompressed background from the given <folder>" << 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
|
<< " --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){
|
std::string stringPathFixes(const std::string& s){
|
||||||
@ -171,6 +172,7 @@ std::string stringPathFixes(const std::string& s){
|
|||||||
int main (int argc, char* argv[])
|
int main (int argc, char* argv[])
|
||||||
{
|
{
|
||||||
int mode = 0;
|
int mode = 0;
|
||||||
|
int max_fps = 30;
|
||||||
bool audio_support = true;
|
bool audio_support = true;
|
||||||
std::string path;
|
std::string path;
|
||||||
|
|
||||||
@ -180,9 +182,10 @@ int main (int argc, char* argv[])
|
|||||||
{"screen-root", required_argument, 0, 'r'},
|
{"screen-root", required_argument, 0, 'r'},
|
||||||
{"pkg", required_argument, 0, 'p'},
|
{"pkg", required_argument, 0, 'p'},
|
||||||
{"dir", required_argument, 0, 'd'},
|
{"dir", required_argument, 0, 'd'},
|
||||||
{"silent", optional_argument, 0, 's'},
|
{"silent", no_argument, 0, 's'},
|
||||||
{"help", optional_argument, 0, 'h'},
|
{"help", no_argument, 0, 'h'},
|
||||||
{nullptr, 0, 0, 0}
|
{"fps", required_argument, 0, 'f'},
|
||||||
|
{nullptr, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
@ -217,6 +220,10 @@ int main (int argc, char* argv[])
|
|||||||
print_help (argv [0]);
|
print_help (argv [0]);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case 'f':
|
||||||
|
max_fps = atoi (optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -292,18 +299,21 @@ int main (int argc, char* argv[])
|
|||||||
// register nodes
|
// register nodes
|
||||||
wp::video::renderer::queueNode (wp_project->getScene ());
|
wp::video::renderer::queueNode (wp_project->getScene ());
|
||||||
|
|
||||||
int32_t lastTime = 0;
|
irr::u32 lastTime = 0;
|
||||||
int32_t minimumTime = 1000 / 90;
|
irr::u32 minimumTime = 1000 / max_fps;
|
||||||
int32_t currentTime = 0;
|
irr::u32 currentTime = 0;
|
||||||
|
|
||||||
|
irr::u32 startTime = 0;
|
||||||
|
irr::u32 endTime = 0;
|
||||||
|
|
||||||
while (wp::irrlicht::device->run () && wp::irrlicht::driver)
|
while (wp::irrlicht::device->run () && wp::irrlicht::driver)
|
||||||
{
|
{
|
||||||
// if (device->isWindowActive ())
|
// if (device->isWindowActive ())
|
||||||
{
|
{
|
||||||
currentTime = wp::irrlicht::device->getTimer ()->getTime ();
|
currentTime = startTime = wp::irrlicht::device->getTimer ()->getTime ();
|
||||||
g_Time = currentTime / 1000.0f;
|
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 cur = Viewports.begin ();
|
||||||
std::vector<irr::core::rect<irr::s32>>::iterator end = Viewports.end ();
|
std::vector<irr::core::rect<irr::s32>>::iterator end = Viewports.end ();
|
||||||
@ -314,13 +324,15 @@ int main (int argc, char* argv[])
|
|||||||
wp::irrlicht::driver->setViewPort (*cur);
|
wp::irrlicht::driver->setViewPort (*cur);
|
||||||
wp::video::renderer::render ();
|
wp::video::renderer::render ();
|
||||||
}
|
}
|
||||||
|
|
||||||
lastTime = currentTime;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wp::irrlicht::device->sleep (1, false);
|
wp::video::renderer::render ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
endTime = wp::irrlicht::device->getTimer ()->getTime ();
|
||||||
|
|
||||||
|
wp::irrlicht::device->sleep (minimumTime - (endTime - startTime), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user