summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/CustomPipelineAction.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2026-04-03 13:38:04 -0400
committerGitHub <noreply@github.com>2026-04-03 13:38:04 -0400
commit798f581c38acfbd9196ba4884cfb9dfd6ef85684 (patch)
tree3421446055c78b54837f5d51372c3611fc65eebb /Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/CustomPipelineAction.cpp
parentd3b89b4c39a312b52546c3604379b3f51ec3c876 (diff)
parent306daff51728d71efa833dfaa5b32b3693178874 (diff)
Merge pull request #14140 from iwubcode/blurry_bloom
VideoCommon: add a graphics mod feature to modify EFBs with a custom material, enhance bloom
Diffstat (limited to 'Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/CustomPipelineAction.cpp')
-rw-r--r--Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/CustomPipelineAction.cpp78
1 files changed, 26 insertions, 52 deletions
diff --git a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/CustomPipelineAction.cpp b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/CustomPipelineAction.cpp
index 4e22d5b3f8..35c8ce0a25 100644
--- a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/CustomPipelineAction.cpp
+++ b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/CustomPipelineAction.cpp
@@ -3,7 +3,11 @@
#include "VideoCommon/GraphicsModSystem/Runtime/Actions/CustomPipelineAction.h"
+#include "Common/JsonUtil.h"
#include "Common/Logging/Log.h"
+#include "Core/System.h"
+
+#include "VideoCommon/Resources/CustomResourceManager.h"
std::unique_ptr<CustomPipelineAction>
CustomPipelineAction::Create(std::shared_ptr<VideoCommon::CustomAssetLibrary> library)
@@ -15,58 +19,16 @@ std::unique_ptr<CustomPipelineAction>
CustomPipelineAction::Create(const picojson::value& json_data,
std::shared_ptr<VideoCommon::CustomAssetLibrary> library)
{
- std::vector<CustomPipelineAction::PipelinePassPassDescription> pipeline_passes;
-
- const auto& passes_json = json_data.get("passes");
- if (passes_json.is<picojson::array>())
- {
- for (const auto& passes_json_val : passes_json.get<picojson::array>())
- {
- CustomPipelineAction::PipelinePassPassDescription pipeline_pass;
- if (!passes_json_val.is<picojson::object>())
- {
- ERROR_LOG_FMT(VIDEO,
- "Failed to load custom pipeline action, 'passes' has an array value that "
- "is not an object!");
- return nullptr;
- }
-
- auto pass = passes_json_val.get<picojson::object>();
- if (!pass.contains("pixel_material_asset"))
- {
- ERROR_LOG_FMT(VIDEO,
- "Failed to load custom pipeline action, 'passes' value missing required "
- "field 'pixel_material_asset'");
- return nullptr;
- }
+ auto material_asset = ReadStringFromJson(json_data.get<picojson::object>(), "material_asset");
- auto pixel_material_asset_json = pass["pixel_material_asset"];
- if (!pixel_material_asset_json.is<std::string>())
- {
- ERROR_LOG_FMT(VIDEO, "Failed to load custom pipeline action, 'passes' field "
- "'pixel_material_asset' is not a string!");
- return nullptr;
- }
- pipeline_pass.m_pixel_material_asset = pixel_material_asset_json.to_str();
- pipeline_passes.push_back(std::move(pipeline_pass));
- }
- }
-
- if (pipeline_passes.empty())
+ if (!material_asset)
{
- ERROR_LOG_FMT(VIDEO, "Failed to load custom pipeline action, must specify at least one pass");
+ ERROR_LOG_FMT(VIDEO,
+ "Failed to load custom pipeline action, 'material_asset' does not have a value");
return nullptr;
}
- if (pipeline_passes.size() > 1)
- {
- ERROR_LOG_FMT(
- VIDEO,
- "Failed to load custom pipeline action, multiple passes are not currently supported");
- return nullptr;
- }
-
- return std::make_unique<CustomPipelineAction>(std::move(library), std::move(pipeline_passes));
+ return std::make_unique<CustomPipelineAction>(std::move(library), std::move(*material_asset));
}
CustomPipelineAction::CustomPipelineAction(std::shared_ptr<VideoCommon::CustomAssetLibrary> library)
@@ -74,14 +36,26 @@ CustomPipelineAction::CustomPipelineAction(std::shared_ptr<VideoCommon::CustomAs
{
}
-CustomPipelineAction::CustomPipelineAction(
- std::shared_ptr<VideoCommon::CustomAssetLibrary> library,
- std::vector<PipelinePassPassDescription> pass_descriptions)
- : m_library(std::move(library)), m_passes_config(std::move(pass_descriptions))
+CustomPipelineAction::CustomPipelineAction(std::shared_ptr<VideoCommon::CustomAssetLibrary> library,
+ std::string material_asset)
+ : m_library(std::move(library)), m_material_asset(std::move(material_asset))
{
- m_pipeline_passes.resize(m_passes_config.size());
}
void CustomPipelineAction::OnDrawStarted(GraphicsModActionData::DrawStarted*)
{
+ // TODO
+}
+
+void CustomPipelineAction::AfterEFB(GraphicsModActionData::PostEFB* post_efb)
+{
+ if (!post_efb) [[unlikely]]
+ return;
+
+ if (m_material_asset.empty())
+ return;
+
+ auto& resource_manager = Core::System::GetInstance().GetCustomResourceManager();
+ post_efb->material =
+ resource_manager.GetPostProcessingMaterialFromAsset(m_material_asset, m_library);
}