forked from teamnwah/openmw-tes3coop
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
2 changed files with 15 additions and 0 deletions
|
@ -676,6 +676,7 @@ void OMW::Engine::go()
|
||||||
// Start the main rendering loop
|
// Start the main rendering loop
|
||||||
osg::Timer frameTimer;
|
osg::Timer frameTimer;
|
||||||
double simulationTime = 0.0;
|
double simulationTime = 0.0;
|
||||||
|
float framerateLimit = Settings::Manager::getFloat("framerate limit", "Video");
|
||||||
while (!mViewer->done() && !mEnvironment.getStateManager()->hasQuitRequest())
|
while (!mViewer->done() && !mEnvironment.getStateManager()->hasQuitRequest())
|
||||||
{
|
{
|
||||||
double dt = frameTimer.time_s();
|
double dt = frameTimer.time_s();
|
||||||
|
@ -693,6 +694,7 @@ void OMW::Engine::go()
|
||||||
if (!mEnvironment.getInputManager()->isWindowVisible())
|
if (!mEnvironment.getInputManager()->isWindowVisible())
|
||||||
{
|
{
|
||||||
OpenThreads::Thread::microSleep(5000);
|
OpenThreads::Thread::microSleep(5000);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -700,6 +702,16 @@ void OMW::Engine::go()
|
||||||
mViewer->updateTraversal();
|
mViewer->updateTraversal();
|
||||||
mViewer->renderingTraversals();
|
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
|
// Save user settings
|
||||||
|
|
|
@ -20,6 +20,9 @@ vsync = false
|
||||||
gamma = 1.00
|
gamma = 1.00
|
||||||
contrast = 1.00
|
contrast = 1.00
|
||||||
|
|
||||||
|
# Maximum framerate in frames per second, 0 = unlimited
|
||||||
|
framerate limit = 0
|
||||||
|
|
||||||
[GUI]
|
[GUI]
|
||||||
scaling factor = 1.0
|
scaling factor = 1.0
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue