// EffectV2: Base class for v2 effects with multi-input/multi-output support #pragma once #include "gpu/gpu.h" #include "gpu/sequence_v2.h" #include #include class NodeRegistry; class EffectV2 { public: EffectV2(const GpuContext& ctx, const std::vector& inputs, const std::vector& outputs); virtual ~EffectV2() = default; // Optional: Declare temporary nodes (e.g., multi-pass intermediate buffers) virtual void declare_nodes(NodeRegistry& registry) { (void)registry; } // Render effect (multi-input/multi-output) virtual void render(WGPUCommandEncoder encoder, const UniformsSequenceParams& params, NodeRegistry& nodes) = 0; // Resize notification virtual void resize(int width, int height) { width_ = width; height_ = height; } const std::vector& input_nodes() const { return input_nodes_; } const std::vector& output_nodes() const { return output_nodes_; } protected: const GpuContext& ctx_; std::vector input_nodes_; std::vector output_nodes_; int width_ = 1280; int height_ = 720; };