summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.h
diff options
context:
space:
mode:
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;
+};