summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2023-08-22 02:18:40 +0200
committerGitHub <noreply@github.com>2023-08-22 02:18:40 +0200
commitdbe6a5f7e4caca71de9d9ba86916f82c0bc21683 (patch)
tree84fd8c6f664f1df62350f9d7b5aa9d110b6aee02 /Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp
parent3451cb1ca2583f9c2b02d0d216355047787c134b (diff)
parent55061216855af89f21eee1174fa81d927bc94991 (diff)
Merge pull request #11300 from iwubcode/custom-shaders
VideoCommon: add a graphics mod action that allows you to modify the game's base rendering
Diffstat (limited to 'Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp')
-rw-r--r--Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp38
1 files changed, 32 insertions, 6 deletions
diff --git a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp
index 3e4cd6e4e6..0d2f0fe347 100644
--- a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp
+++ b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/GraphicsModManager.cpp
@@ -13,7 +13,9 @@
#include "Core/ConfigManager.h"
+#include "VideoCommon/Assets/DirectFilesystemAssetLibrary.h"
#include "VideoCommon/GraphicsModSystem/Config/GraphicsMod.h"
+#include "VideoCommon/GraphicsModSystem/Config/GraphicsModAsset.h"
#include "VideoCommon/GraphicsModSystem/Config/GraphicsModGroup.h"
#include "VideoCommon/GraphicsModSystem/Runtime/GraphicsModActionFactory.h"
#include "VideoCommon/TextureInfo.h"
@@ -187,6 +189,8 @@ void GraphicsModManager::Load(const GraphicsModGroupConfig& config)
const auto& mods = config.GetMods();
+ auto filesystem_library = std::make_shared<VideoCommon::DirectFilesystemAssetLibrary>();
+
std::map<std::string, std::vector<GraphicsTargetConfig>> group_to_targets;
for (const auto& mod : mods)
{
@@ -208,6 +212,29 @@ void GraphicsModManager::Load(const GraphicsModGroupConfig& config)
group_to_targets[internal_group].push_back(target);
}
}
+
+ std::string base_path;
+ SplitPath(mod.GetAbsolutePath(), &base_path, nullptr, nullptr);
+ for (const GraphicsModAssetConfig& asset : mod.m_assets)
+ {
+ auto asset_map = asset.m_map;
+ for (auto& [k, v] : asset_map)
+ {
+ if (v.is_absolute())
+ {
+ WARN_LOG_FMT(VIDEO,
+ "Specified graphics mod asset '{}' for mod '{}' has an absolute path, you "
+ "shouldn't release this to users.",
+ asset.m_name, mod.m_title);
+ }
+ else
+ {
+ v = std::filesystem::path{base_path} / v;
+ }
+ }
+
+ filesystem_library->SetAssetIDMapData(asset.m_name, std::move(asset_map));
+ }
}
for (const auto& mod : mods)
@@ -215,12 +242,11 @@ void GraphicsModManager::Load(const GraphicsModGroupConfig& config)
for (const GraphicsModFeatureConfig& feature : mod.m_features)
{
const auto create_action =
- [](const std::string_view& action_name, const picojson::value& json_data,
- GraphicsModConfig mod_config) -> std::unique_ptr<GraphicsModAction> {
- std::string base_path;
- SplitPath(mod_config.GetAbsolutePath(), &base_path, nullptr, nullptr);
-
- auto action = GraphicsModActionFactory::Create(action_name, json_data, base_path);
+ [filesystem_library](const std::string_view& action_name,
+ const picojson::value& json_data,
+ GraphicsModConfig mod_config) -> std::unique_ptr<GraphicsModAction> {
+ auto action =
+ GraphicsModActionFactory::Create(action_name, json_data, std::move(filesystem_library));
if (action == nullptr)
{
return nullptr;