// This file is part of the 64k demo project. // ShaderToy effect boilerplate - REPLACE THIS LINE WITH DESCRIPTION // TODO: Update description, rename class, adjust parameters #ifndef SHADERTOY_EFFECT_H_ #define SHADERTOY_EFFECT_H_ #include "gpu/effect.h" #include "gpu/effects/post_process_helper.h" #include "gpu/uniform_helper.h" // TODO: Rename class to match your effect (e.g., TunnelEffect, PlasmaEffect) class ShaderToyEffect : public Effect { public: // TODO: Add constructor parameters for tunable values ShaderToyEffect(const GpuContext& ctx); ~ShaderToyEffect() override; void init(MainSequence* demo) override; void render(WGPURenderPassEncoder pass, float time, float beat, float intensity, float aspect_ratio) override; private: // TODO: Add effect-specific parameters here // Must match WGSL struct exactly - use padding for 16-byte alignment struct ShaderToyParams { float param1; float param2; float _pad[2]; // Padding to 16 bytes }; static_assert(sizeof(ShaderToyParams) == 16, "ShaderToyParams must be 16 bytes for WGSL alignment"); MainSequence* demo_ = nullptr; WGPURenderPipeline pipeline_ = nullptr; WGPUBindGroup bind_group_ = nullptr; WGPUSampler sampler_ = nullptr; UniformBuffer params_; }; #endif /* SHADERTOY_EFFECT_H_ */