summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/GraphicsModSystem
diff options
context:
space:
mode:
authorScott Mansell <phiren@gmail.com>2023-02-09 19:59:16 +1300
committerGitHub <noreply@github.com>2023-02-09 19:59:16 +1300
commitccf92a3e56764d6378c436a8040519a5bffc3372 (patch)
treee2b330b225044e1901e77a6ed147cf21b9d7ac0e /Source/Core/VideoCommon/GraphicsModSystem
parent72b22ef0a54f841b1c52d49cf0e00d3b12c29ac7 (diff)
parent5c1b3ac61d7e660a9d1c206dbd0e615d637d3272 (diff)
Merge pull request #11522 from phire/KillRendererWithFire
Kill Renderer (with phire)
Diffstat (limited to 'Source/Core/VideoCommon/GraphicsModSystem')
-rw-r--r--Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp28
-rw-r--r--Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h10
2 files changed, 36 insertions, 2 deletions
diff --git a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp
index 7441f210fa..368e7adba4 100644
--- a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp
+++ b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp
@@ -10,10 +10,15 @@
#include "Common/Logging/Log.h"
#include "Common/VariantUtil.h"
+#include "Core/ConfigManager.h"
+
#include "VideoCommon/GraphicsModSystem/Config/GraphicsMod.h"
#include "VideoCommon/GraphicsModSystem/Config/GraphicsModGroup.h"
#include "VideoCommon/GraphicsModSystem/Runtime/GraphicsModActionFactory.h"
#include "VideoCommon/TextureInfo.h"
+#include "VideoCommon/VideoConfig.h"
+
+std::unique_ptr<GraphicsModManager> g_graphics_mod_manager;
class GraphicsModManager::DecoratedAction final : public GraphicsModAction
{
@@ -64,6 +69,29 @@ private:
GraphicsModConfig m_mod;
};
+bool GraphicsModManager::Initialize()
+{
+ 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);
+ g_graphics_mod_manager->Load(*g_ActiveConfig.graphics_mod_config);
+
+ m_end_of_frame_event = AfterFrameEvent::Register([this] { EndOfFrame(); }, "ModManager");
+ }
+
+ return true;
+}
+
const std::vector<GraphicsModAction*>&
GraphicsModManager::GetProjectionActions(ProjectionType projection_type) const
{
diff --git a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h
index 1775e3b0e3..ed0063444a 100644
--- a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h
+++ b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h
@@ -13,12 +13,15 @@
#include "VideoCommon/GraphicsModSystem/Runtime/FBInfo.h"
#include "VideoCommon/GraphicsModSystem/Runtime/GraphicsModAction.h"
#include "VideoCommon/TextureInfo.h"
+#include "VideoCommon/VideoEvents.h"
#include "VideoCommon/XFMemory.h"
class GraphicsModGroupConfig;
class GraphicsModManager
{
public:
+ bool Initialize();
+
const std::vector<GraphicsModAction*>& GetProjectionActions(ProjectionType projection_type) const;
const std::vector<GraphicsModAction*>&
GetProjectionTextureActions(ProjectionType projection_type,
@@ -32,9 +35,8 @@ public:
void Load(const GraphicsModGroupConfig& config);
- void EndOfFrame();
-
private:
+ void EndOfFrame();
void Reset();
class DecoratedAction;
@@ -51,4 +53,8 @@ private:
std::unordered_map<FBInfo, std::vector<GraphicsModAction*>, FBInfoHasher> m_xfb_target_to_actions;
std::unordered_set<std::string> m_groups;
+
+ Common::EventHook m_end_of_frame_event;
};
+
+extern std::unique_ptr<GraphicsModManager> g_graphics_mod_manager;