diff --git a/TheForceEngine/TFE_FrontEndUI/frontEndUi.cpp b/TheForceEngine/TFE_FrontEndUI/frontEndUi.cpp index c558af9bd..9f694d920 100644 --- a/TheForceEngine/TFE_FrontEndUI/frontEndUi.cpp +++ b/TheForceEngine/TFE_FrontEndUI/frontEndUi.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -2074,6 +2075,35 @@ namespace TFE_FrontEndUI ImGui::LabelText("##ConfigLabel", "Rendering"); ImGui::PopFont(); + // Frame Rate Limiter. + s32 frameRateLimit = graphics->frameRateLimit; + bool limitEnable = frameRateLimit != 0; + ImGui::Checkbox("Frame Rate Limit Enable", &limitEnable); + + if (limitEnable) + { + if (frameRateLimit < 30) + { + frameRateLimit = 74; + } + ImGui::LabelText("##ConfigLabel", "Maximum Framerate:"); ImGui::SameLine(150 * s_uiScale); + ImGui::SetNextItemWidth(196 * s_uiScale); + ImGui::SliderInt("##FPSLimitSlider", &frameRateLimit, 30, 360, "%d"); + ImGui::SetNextItemWidth(128 * s_uiScale); + ImGui::InputInt("##FPSLimitEdit", &frameRateLimit, 1, 10); + } + else + { + frameRateLimit = 0; + } + + if (frameRateLimit != graphics->frameRateLimit) + { + graphics->frameRateLimit = frameRateLimit; + TFE_System::frameLimiter_set(frameRateLimit); + } + ImGui::Separator(); + ImGui::LabelText("##ConfigLabel", "Renderer:"); ImGui::SameLine(75 * s_uiScale); ImGui::SetNextItemWidth(196 * s_uiScale); ImGui::Combo("##Renderer", &graphics->rendererIndex, c_renderer, IM_ARRAYSIZE(c_renderer)); diff --git a/TheForceEngine/TFE_Settings/settings.cpp b/TheForceEngine/TFE_Settings/settings.cpp index c17659229..18272903a 100644 --- a/TheForceEngine/TFE_Settings/settings.cpp +++ b/TheForceEngine/TFE_Settings/settings.cpp @@ -348,6 +348,7 @@ namespace TFE_Settings writeKeyValue_Bool(settings, "perspectiveCorrect3DO", s_graphicsSettings.perspectiveCorrectTexturing); writeKeyValue_Bool(settings, "extendAjoinLimits", s_graphicsSettings.extendAjoinLimits); writeKeyValue_Bool(settings, "vsync", s_graphicsSettings.vsync); + writeKeyValue_Int(settings, "frameRateLimit", s_graphicsSettings.frameRateLimit); writeKeyValue_Float(settings, "brightness", s_graphicsSettings.brightness); writeKeyValue_Float(settings, "contrast", s_graphicsSettings.contrast); writeKeyValue_Float(settings, "saturation", s_graphicsSettings.saturation); @@ -627,6 +628,10 @@ namespace TFE_Settings { s_graphicsSettings.vsync = parseBool(value); } + else if (strcasecmp("frameRateLimit", key) == 0) + { + s_graphicsSettings.frameRateLimit = parseInt(value); + } else if (strcasecmp("brightness", key) == 0) { s_graphicsSettings.brightness = parseFloat(value); diff --git a/TheForceEngine/TFE_Settings/settings.h b/TheForceEngine/TFE_Settings/settings.h index 346d1e12b..7c8abea0f 100644 --- a/TheForceEngine/TFE_Settings/settings.h +++ b/TheForceEngine/TFE_Settings/settings.h @@ -46,6 +46,7 @@ struct TFE_Settings_Graphics bool perspectiveCorrectTexturing = false; bool extendAjoinLimits = true; bool vsync = true; + s32 frameRateLimit = 0; f32 brightness = 1.0f; f32 contrast = 1.0f; f32 saturation = 1.0f; diff --git a/TheForceEngine/gitVersion.h b/TheForceEngine/gitVersion.h index c814a4eb8..e95f0ccfd 100644 --- a/TheForceEngine/gitVersion.h +++ b/TheForceEngine/gitVersion.h @@ -1,3 +1,3 @@ const char c_gitVersion[] = R"( -v1.01.000-54-g48942f6e +v1.01.000-55-g44dc832f )"; diff --git a/TheForceEngine/main.cpp b/TheForceEngine/main.cpp index fe9a03cc4..420769c49 100644 --- a/TheForceEngine/main.cpp +++ b/TheForceEngine/main.cpp @@ -19,7 +19,7 @@ #include #include #include -// #include +#include #include #include #include @@ -651,8 +651,8 @@ int main(int argc, char* argv[]) TFE_Game* gameInfo = TFE_Settings::getGame(); TFE_SaveSystem::setCurrentGame(gameInfo->id); - // Test - // TFE_System::frameLimiter_set(72.0); + // Setup the framelimiter. + TFE_System::frameLimiter_set(graphics->frameRateLimit); // Game loop u32 frame = 0u; @@ -662,7 +662,7 @@ int main(int argc, char* argv[]) while (s_loop && !TFE_System::quitMessagePosted()) { TFE_FRAME_BEGIN(); - // TFE_System::frameLimiter_begin(); + TFE_System::frameLimiter_begin(); bool enableRelative = TFE_Input::relativeModeEnabled(); if (enableRelative != relativeMode) @@ -846,7 +846,7 @@ int main(int argc, char* argv[]) TFE_RenderBackend::swap(swap); // Handle framerate limiter. - // TFE_System::frameLimiter_end(); + TFE_System::frameLimiter_end(); // Clear transitory input state. if (endInputFrame)