Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a Reflex FPS framerate limit slider #108

Merged
merged 8 commits into from
Nov 7, 2024
Prev Previous commit
Next Next commit
Fix fps limit not disabling
FakeMichau committed Oct 29, 2024

Verified

This commit was signed with the committer’s verified signature.
aljo242 Alex | Interchain Labs
commit eb031331f304cf12489dcc538d6a5ffa0f905508
4 changes: 2 additions & 2 deletions OptiScaler/imgui/imgui_common.cpp
Original file line number Diff line number Diff line change
@@ -1404,8 +1404,8 @@ void ImGuiCommon::RenderMenu()
ImGui::SeparatorText("Reflex");

// set inital value
if (Config::Instance()->FramerateLimit.has_value() && _limitFps > 200)
_limitFps = Config::Instance()->FramerateLimit.value();
if (_limitFps == INFINITY)
_limitFps = Config::Instance()->FramerateLimit.value_or(0);

ImGui::SliderFloat("FPS Limit", &_limitFps, 0, 200, "%.0f");

2 changes: 1 addition & 1 deletion OptiScaler/imgui/imgui_common.h
Original file line number Diff line number Diff line change
@@ -35,7 +35,7 @@ class ImGuiCommon
inline static int _deLimitFps = 500;

// reflex
inline static float _limitFps = 500;
inline static float _limitFps = INFINITY;

// fsr3x
inline static int _fsr3xIndex = -1;
15 changes: 11 additions & 4 deletions OptiScaler/nvapi/ReflexHooks.h
Original file line number Diff line number Diff line change
@@ -95,24 +95,31 @@ class ReflexHooks {
Config::Instance()->ReflexAvailable = _markersPresent;

static float lastFps = 0;
float currentFps = Config::Instance()->FramerateLimit.value_or(200);
float currentFps = Config::Instance()->FramerateLimit.value_or(0);

if (fgState)
currentFps = currentFps / 2;

if (Config::Instance()->FramerateLimit.has_value() && (currentFps != lastFps)) {
if (currentFps != lastFps) {
setFPSLimit(currentFps);
lastFps = currentFps;
}
}

// 0 - disables the fps cap
inline static void setFPSLimit(float fps) {
LOG_INFO("Set FPS Limit to: {}", fps);
if (fps == 0.0)
_minimumIntervalUs = 0;
else
_minimumIntervalUs = 1'000'000 / fps;
if (_lastSleepDev != nullptr)
hNvAPI_D3D_SetSleepMode(_lastSleepDev, &_lastSleepParams);

if (_lastSleepDev != nullptr) {
NV_SET_SLEEP_MODE_PARAMS temp{};
memcpy(&temp, &_lastSleepParams, sizeof(NV_SET_SLEEP_MODE_PARAMS));
temp.minimumIntervalUs = _minimumIntervalUs;
o_NvAPI_D3D_SetSleepMode(_lastSleepDev, &temp);
}

}
};