summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h
diff options
context:
space:
mode:
authoriwubcode <iwubcode@users.noreply.github.com>2022-03-05 00:41:14 -0600
committeriwubcode <iwubcode@users.noreply.github.com>2022-06-27 18:20:52 -0500
commitf416b7192536d340685cf17297f1bcb02adb9baa (patch)
tree6f54702055c6871b9422f752b8d64dd7a380586d /Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h
parent254246b814124f0f1dff5e1aebd9672c0d1bd492 (diff)
VideoCommon: add logic to handle a GraphicsMod while Dolphin is running
Diffstat (limited to 'Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h')
-rw-r--r--Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h
new file mode 100644
index 0000000000..5151b85dbd
--- /dev/null
+++ b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h
@@ -0,0 +1,54 @@
+// Copyright 2022 Dolphin Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <list>
+#include <memory>
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+
+#include "VideoCommon/GraphicsModSystem/Runtime/FBInfo.h"
+#include "VideoCommon/GraphicsModSystem/Runtime/GraphicsModAction.h"
+#include "VideoCommon/TextureInfo.h"
+#include "VideoCommon/XFMemory.h"
+
+class GraphicsModGroupConfig;
+class GraphicsModManager
+{
+public:
+ const std::vector<GraphicsModAction*>& GetProjectionActions(ProjectionType projection_type) const;
+ const std::vector<GraphicsModAction*>&
+ GetProjectionTextureActions(ProjectionType projection_type,
+ const std::string& texture_name) const;
+ const std::vector<GraphicsModAction*>&
+ GetDrawStartedActions(const std::string& texture_name) const;
+ const std::vector<GraphicsModAction*>&
+ GetTextureLoadActions(const std::string& texture_name) const;
+ const std::vector<GraphicsModAction*>& GetEFBActions(const FBInfo& efb) const;
+ const std::vector<GraphicsModAction*>& GetXFBActions(const FBInfo& xfb) const;
+
+ void Load(const GraphicsModGroupConfig& config);
+
+ void EndOfFrame();
+
+private:
+ void Reset();
+
+ class DecoratedAction;
+
+ static inline const std::vector<GraphicsModAction*> m_default = {};
+ std::list<std::unique_ptr<GraphicsModAction>> m_actions;
+ std::unordered_map<ProjectionType, std::vector<GraphicsModAction*>>
+ m_projection_target_to_actions;
+ std::unordered_map<std::string, std::vector<GraphicsModAction*>>
+ m_projection_texture_target_to_actions;
+ std::unordered_map<std::string, std::vector<GraphicsModAction*>> m_draw_started_target_to_actions;
+ std::unordered_map<std::string, std::vector<GraphicsModAction*>> m_load_target_to_actions;
+ std::unordered_map<FBInfo, std::vector<GraphicsModAction*>, FBInfoHasher> m_efb_target_to_actions;
+ std::unordered_map<FBInfo, std::vector<GraphicsModAction*>, FBInfoHasher> m_xfb_target_to_actions;
+
+ std::unordered_set<std::string> m_groups;
+};