// Copyright 2022 Dolphin Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include #include #include #include "VideoCommon/AbstractTexture.h" #include "VideoCommon/Assets/CustomAssetLibrary.h" #include "VideoCommon/Assets/MaterialAsset.h" #include "VideoCommon/Assets/ShaderAsset.h" #include "VideoCommon/Assets/TextureAsset.h" #include "VideoCommon/GraphicsModSystem/Runtime/GraphicsModAction.h" #include "VideoCommon/ShaderGenCommon.h" class CustomPipelineAction final : public GraphicsModAction { public: struct PipelinePassPassDescription { std::string m_pixel_material_asset; }; static std::unique_ptr Create(const picojson::value& json_data, std::shared_ptr library); CustomPipelineAction(std::shared_ptr library, std::vector pass_descriptions); ~CustomPipelineAction(); void OnDrawStarted(GraphicsModActionData::DrawStarted*) override; void OnTextureCreate(GraphicsModActionData::TextureCreate*) override; private: std::shared_ptr m_library; std::vector m_passes_config; struct PipelinePass { VideoCommon::CachedAsset m_pixel_material; VideoCommon::CachedAsset m_pixel_shader; std::vector> m_game_textures; }; std::vector m_passes; ShaderCode m_last_generated_shader_code; bool m_valid = true; std::vector m_texture_code_names; };