diff options
Diffstat (limited to 'src/gpu/sequence_v2.h')
| -rw-r--r-- | src/gpu/sequence_v2.h | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/src/gpu/sequence_v2.h b/src/gpu/sequence_v2.h deleted file mode 100644 index 2197a82..0000000 --- a/src/gpu/sequence_v2.h +++ /dev/null @@ -1,128 +0,0 @@ -// Sequence v2: Explicit node system with DAG effect routing -// Replaces implicit framebuffer ping-pong with compile-time optimized nodes - -#pragma once - -#include "gpu/gpu.h" -#include "gpu/uniform_helper.h" -#include "util/mini_math.h" -#include <map> -#include <memory> -#include <string> -#include <vector> - -class EffectV2; - -enum class NodeType { - U8X4_NORM, // RGBAu8 normalized (0-1) - default Source/Sink - F32X4, // RGBA float32 - F16X8, // 8-channel float16 - DEPTH24, // Depth buffer - COMPUTE_F32, // Compute buffer -}; - -struct Node { - NodeType type; - int width; - int height; - WGPUTexture texture; - WGPUTextureView view; - std::vector<WGPUTextureView> mip_views; // For multi-target render -}; - -struct UniformsSequenceParams { - vec2 resolution; - float aspect_ratio; - float time; // Per-sequence relative time - float beat_time; // Musical beats - float beat_phase; // Fractional beat 0.0-1.0 - float audio_intensity; - float _pad; -}; -static_assert(sizeof(UniformsSequenceParams) == 32, - "UniformsSequenceParams must be 32 bytes for WGSL alignment"); - -class NodeRegistry { - public: - NodeRegistry(WGPUDevice device, int default_width, int default_height); - ~NodeRegistry(); - - // Declare new node with explicit type/dimensions - void declare_node(const std::string& name, NodeType type, int width, - int height); - - // Declare aliased node (ping-pong optimization) - void declare_aliased_node(const std::string& name, - const std::string& alias_of); - - // Retrieve views - WGPUTextureView get_view(const std::string& name); - std::vector<WGPUTextureView> - get_output_views(const std::vector<std::string>& names); - - // Resize all nodes - void resize(int width, int height); - - // Check if node exists - bool has_node(const std::string& name) const; - - // Register external view (for source/sink managed externally) - void set_external_view(const std::string& name, WGPUTextureView view); - - private: - WGPUDevice device_; - int default_width_; - int default_height_; - std::map<std::string, Node> nodes_; - std::map<std::string, std::string> aliases_; // name -> backing node name - - void create_texture(Node& node); -}; - -struct EffectDAGNode { - std::shared_ptr<EffectV2> effect; - std::vector<std::string> input_nodes; - std::vector<std::string> output_nodes; - int execution_order; // Topologically sorted -}; - -class SequenceV2 { - public: - SequenceV2(const GpuContext& ctx, int width, int height); - virtual ~SequenceV2() = default; - - // Virtual methods (most sequences use defaults) - virtual void preprocess(float seq_time, float beat_time, float beat_phase, - float audio_intensity); - virtual void postprocess(WGPUCommandEncoder encoder); - virtual void render_effects(WGPUCommandEncoder encoder); - - void resize(int width, int height); - - // Initialize effect nodes (call at end of subclass constructor) - void init_effect_nodes(); - - // Set surface texture view for rendering (sink node) - void set_sink_view(WGPUTextureView view) { - nodes_.set_external_view("sink", view); - } - - // Set source texture view (input framebuffer) - void set_source_view(WGPUTextureView view) { - nodes_.set_external_view("source", view); - } - - // Test accessor - const std::vector<EffectDAGNode>& get_effect_dag() const { - return effect_dag_; - } - - protected: - const GpuContext& ctx_; - int width_; - int height_; - NodeRegistry nodes_; - std::vector<EffectDAGNode> effect_dag_; - UniformsSequenceParams params_; - UniformBuffer<UniformsSequenceParams> uniforms_buffer_; -}; |
