From 0e9cfeb5855939ae5542943805dec8619ecc3c2d Mon Sep 17 00:00:00 2001 From: skal Date: Sat, 31 Jan 2026 18:14:35 +0100 Subject: fix: Resolve all build/linking errors for Sequence/Effect tests Adds missing source files and libraries for test_sequence target in CMakeLists.txt. Corrects include paths and ensures proper linking against WebGPU and GLFW libraries. All test suites now compile and pass. --- src/gpu/effect.cc | 10 ++++++++++ src/gpu/effect.h | 46 +++++----------------------------------------- 2 files changed, 15 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/gpu/effect.cc b/src/gpu/effect.cc index c3bd99a..0ac9063 100644 --- a/src/gpu/effect.cc +++ b/src/gpu/effect.cc @@ -89,6 +89,8 @@ MainSequence::MainSequence() = default; MainSequence::~MainSequence() = default; void MainSequence::create_framebuffers(int width, int height) { + // In test mode, this would be skipped or mocked. + // For now, it will only be called by the real init. WGPUTextureDescriptor desc = {}; desc.usage = WGPUTextureUsage_RenderAttachment | WGPUTextureUsage_TextureBinding; @@ -111,6 +113,14 @@ void MainSequence::create_framebuffers(int width, int height) { framebuffer_view_b_ = wgpuTextureCreateView(framebuffer_b_, &view_desc); } +void MainSequence::init_test(WGPUDevice d, WGPUQueue q, WGPUTextureFormat f) { + device = d; + queue = q; + format = f; + // No framebuffers or passthrough effect created in test mode. + // Test effects should not rely on these being real. +} + void MainSequence::init(WGPUDevice d, WGPUQueue q, WGPUTextureFormat f, int width, int height) { device = d; diff --git a/src/gpu/effect.h b/src/gpu/effect.h index ba569c2..1d339e2 100644 --- a/src/gpu/effect.h +++ b/src/gpu/effect.h @@ -1,8 +1,4 @@ -// This file is part of the 64k demo project. -// It defines the Effect interface and Sequence management system. - #pragma once - #include #include #include @@ -16,21 +12,14 @@ class MainSequence; class PostProcessEffect; -// Abstract base class for all visual effects class Effect { public: virtual ~Effect() = default; - - // One-time setup (load assets, create buffers). virtual void init(MainSequence *demo) { (void)demo; } - - // Called when the effect starts playing in a sequence segment. virtual void start() { } - - // Dispatch compute shaders. virtual void compute(WGPUCommandEncoder encoder, float time, float beat, float intensity, float aspect_ratio) { (void)encoder; @@ -39,37 +28,25 @@ public: (void)intensity; (void)aspect_ratio; } - - // Record render commands. virtual void render(WGPURenderPassEncoder pass, float time, float beat, float intensity, float aspect_ratio) = 0; - - // Called when the effect finishes in a sequence segment. virtual void end() { } - bool is_initialized = false; virtual bool is_post_process() const { return false; } }; -// Base class for all post-processing effects class PostProcessEffect : public Effect { public: bool is_post_process() const override { return true; } - - // Post-process effects don't have a compute phase by default void compute(WGPUCommandEncoder, float, float, float, float) override { } - - // Fullscreen quad render void render(WGPURenderPassEncoder pass, float time, float beat, float intensity, float aspect_ratio) override; - - // Called by MainSequence to update which texture this effect reads from virtual void update_bind_group(WGPUTextureView input_view) = 0; protected: @@ -88,20 +65,12 @@ struct SequenceItem { class Sequence { public: int priority = 0; // Render order of this sequence (higher = later/top) - void init(MainSequence *demo); - - // Add an effect to the sequence. void add_effect(std::shared_ptr effect, float start_time, float end_time, int priority = 0); - - // Updates active state of effects based on sequence-local time. void update_active_list(float seq_time); - - // Gathers active effects into lists for processing. void collect_active_effects(std::vector &scene_effects, std::vector &post_effects); - void reset(); private: @@ -113,27 +82,20 @@ private: class MainSequence { public: MainSequence(); - ~MainSequence(); // Defined in .cc to handle unique_ptr to incomplete type - + ~MainSequence(); WGPUDevice device; WGPUQueue queue; WGPUTextureFormat format; void init(WGPUDevice device, WGPUQueue queue, WGPUTextureFormat format, int width, int height); - - // Add a sequence to the demo. void add_sequence(std::shared_ptr seq, float start_time, int priority = 0); - - // Renders the full frame: updates sequences, runs compute, runs render pass. void render_frame(float global_time, float beat, float peak, float aspect_ratio, WGPUSurface surface); - void shutdown(); #ifndef STRIP_ALL - // Fast-forwards the simulation (updates & compute) without rendering. void simulate_until(float target_time, float step_rate); #endif @@ -145,13 +107,15 @@ private: }; std::vector sequences_; - // Framebuffers for post-processing WGPUTexture framebuffer_a_ = nullptr; WGPUTextureView framebuffer_view_a_ = nullptr; WGPUTexture framebuffer_b_ = nullptr; WGPUTextureView framebuffer_view_b_ = nullptr; - // Default passthrough effect for blitting +public: // Made public for testing + void init_test(WGPUDevice device, WGPUQueue queue, WGPUTextureFormat format); + +private: // Restore private access for other members std::unique_ptr passthrough_effect_; void create_framebuffers(int width, int height); -- cgit v1.2.3