diff --git a/src/utils/settings.hpp b/src/utils/settings.hpp index 58397a195..5c1993201 100644 --- a/src/utils/settings.hpp +++ b/src/utils/settings.hpp @@ -12,6 +12,7 @@ #include "./bitwise.hpp" #include "./icons.hpp" +#include "./log.hpp" #include "./mutex.hpp" namespace renodx::utils::settings { @@ -395,6 +396,9 @@ static void OnRegisterOverlay(reshade::api::effect_runtime* runtime) { LoadSettings(global_name + "-preset3"); break; } + // Persist the selected profile to reshade.ini so it will be restored next run. + reshade::set_config_value(nullptr, global_name.c_str(), "SelectedProfile", preset_index); + for (auto& callback : on_preset_changed_callbacks) { callback(); } @@ -655,7 +659,47 @@ static void Use(DWORD fdw_reason, Settings* new_settings, void (*new_on_preset_o on_preset_off_callbacks.emplace_back(new_on_preset_off); } LoadGlobalSettings(); - LoadSettings(global_name + "-preset1"); + + if (use_presets) { + // Decide which preset to apply on startup + int stored_profile = preset_index; + const bool has_stored = reshade::get_config_value(nullptr, global_name.c_str(), "SelectedProfile", stored_profile); + + if (!has_stored) { + // No stored profile -> default to preset 1 + preset_index = 1; + renodx::utils::log::d("utils::settings::Use(No SelectedProfile -> Defaulting to ", GetCurrentPresetName(), ")"); + LoadSettings(GetCurrentPresetName()); + } else { + // Clamp stored value to valid range + if (stored_profile < 0) { + stored_profile = 0; + } else if (stored_profile >= static_cast(preset_strings.size())) { + stored_profile = static_cast(preset_strings.size() - 1); + } + preset_index = stored_profile; + + if (preset_index == 0) { + renodx::utils::log::d("utils::settings::Use(SelectedProfile=", preset_index, " -> Applying Off)"); + for (auto& callback : on_preset_off_callbacks) { + callback(); + } + } else { + // Load the named preset section + renodx::utils::log::d("utils::settings::Use(SelectedProfile=", preset_index, " -> Loading ", GetCurrentPresetName(), ")"); + LoadSettings(GetCurrentPresetName()); + } + + for (auto& callback : on_preset_changed_callbacks) { + callback(); + } + } + } else { + // Presets disabled — keep previous behavior (load preset1 by default) + preset_index = 1; + LoadSettings(global_name + "-preset1"); + } + reshade::register_overlay(overlay_title.c_str(), OnRegisterOverlay); break;