mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-22 12:39:59 +00:00
Implement framerate limit setting
The framerate limit can be used to reduce strain on the CPU and GPU, in a way similar to VSync, but without the increased input lag that is typical with VSync.
This commit is contained in:
parent
96e3933ee9
commit
481f23d955
@ -676,6 +676,7 @@ void OMW::Engine::go()
|
||||
// Start the main rendering loop
|
||||
osg::Timer frameTimer;
|
||||
double simulationTime = 0.0;
|
||||
float framerateLimit = Settings::Manager::getFloat("framerate limit", "Video");
|
||||
while (!mViewer->done() && !mEnvironment.getStateManager()->hasQuitRequest())
|
||||
{
|
||||
double dt = frameTimer.time_s();
|
||||
@ -693,6 +694,7 @@ void OMW::Engine::go()
|
||||
if (!mEnvironment.getInputManager()->isWindowVisible())
|
||||
{
|
||||
OpenThreads::Thread::microSleep(5000);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -700,6 +702,16 @@ void OMW::Engine::go()
|
||||
mViewer->updateTraversal();
|
||||
mViewer->renderingTraversals();
|
||||
}
|
||||
|
||||
if (framerateLimit > 0.f)
|
||||
{
|
||||
double thisFrameTime = frameTimer.time_s();
|
||||
double minFrameTime = 1.0 / framerateLimit;
|
||||
if (thisFrameTime < minFrameTime)
|
||||
{
|
||||
OpenThreads::Thread::microSleep(1000*1000*(minFrameTime-thisFrameTime));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Save user settings
|
||||
|
@ -20,6 +20,9 @@ vsync = false
|
||||
gamma = 1.00
|
||||
contrast = 1.00
|
||||
|
||||
# Maximum framerate in frames per second, 0 = unlimited
|
||||
framerate limit = 0
|
||||
|
||||
[GUI]
|
||||
scaling factor = 1.0
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user