summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/RenderBase.cpp
diff options
context:
space:
mode:
authoriwubcode <iwubcode@users.noreply.github.com>2022-03-15 01:46:58 -0500
committeriwubcode <iwubcode@users.noreply.github.com>2022-06-27 18:20:52 -0500
commit69839df1eb2a594b81bceb8cfac58ccbba286628 (patch)
tree5100396162fa62e08a4b5c4aa6906432d1b945ff /Source/Core/VideoCommon/RenderBase.cpp
parent892678648eee7a1724b790fba0aa312e0fe8c728 (diff)
VideoCommon: support dynamically updating game mods at runtime
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp
index b13f74542c..412461d409 100644
--- a/Source/Core/VideoCommon/RenderBase.cpp
+++ b/Source/Core/VideoCommon/RenderBase.cpp
@@ -136,6 +136,22 @@ bool Renderer::Initialize()
return false;
}
+ if (g_ActiveConfig.bGraphicMods)
+ {
+ // If a config change occurred in a previous session,
+ // remember the old change count value. By setting
+ // our current change count to the old value, we
+ // avoid loading the stale data when we
+ // check for config changes.
+ const u32 old_game_mod_changes = g_ActiveConfig.graphics_mod_config ?
+ g_ActiveConfig.graphics_mod_config->GetChangeCount() :
+ 0;
+ g_ActiveConfig.graphics_mod_config = GraphicsModGroupConfig(SConfig::GetInstance().GetGameID());
+ g_ActiveConfig.graphics_mod_config->Load();
+ g_ActiveConfig.graphics_mod_config->SetChangeCount(old_game_mod_changes);
+ m_graphics_mod_manager.Load(*g_ActiveConfig.graphics_mod_config);
+ }
+
return true;
}
@@ -466,12 +482,27 @@ void Renderer::CheckForConfigChanges()
const bool old_force_filtering = g_ActiveConfig.bForceFiltering;
const bool old_vsync = g_ActiveConfig.bVSyncActive;
const bool old_bbox = g_ActiveConfig.bBBoxEnable;
+ const u32 old_game_mod_changes =
+ g_ActiveConfig.graphics_mod_config ? g_ActiveConfig.graphics_mod_config->GetChangeCount() : 0;
+ const bool old_graphics_mods_enabled = g_ActiveConfig.bGraphicMods;
UpdateActiveConfig();
FreeLook::UpdateActiveConfig();
g_freelook_camera.SetControlType(FreeLook::GetActiveConfig().camera_config.control_type);
+ if (g_ActiveConfig.bGraphicMods && !old_graphics_mods_enabled)
+ {
+ g_ActiveConfig.graphics_mod_config = GraphicsModGroupConfig(SConfig::GetInstance().GetGameID());
+ g_ActiveConfig.graphics_mod_config->Load();
+ }
+
+ if (g_ActiveConfig.graphics_mod_config &&
+ (old_game_mod_changes != g_ActiveConfig.graphics_mod_config->GetChangeCount()))
+ {
+ m_graphics_mod_manager.Load(*g_ActiveConfig.graphics_mod_config);
+ }
+
// Update texture cache settings with any changed options.
g_texture_cache->OnConfigChanged(g_ActiveConfig);