diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-08 17:43:44 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-08 17:43:44 +0100 |
| commit | 4b23fdc63d422b31b6ad86d34218e7b66b462514 (patch) | |
| tree | 028e4fec0d49a7a3a997bd446c9f1ce480ce787b /src/gpu/demo_effects.h | |
| parent | 8296fe5180b979b9d1f32f6375b41f0e0a8a399d (diff) | |
feat(gpu): Add parameter-driven GaussianBlurEffect
Extends shader parametrization system to GaussianBlurEffect with
strength parameter (Task #73 continued).
Changes:
- Added GaussianBlurParams struct (strength, default: 2.0f)
- Added GaussianBlurUniforms with proper WGSL alignment (32 bytes)
- Updated shader to use parameterized strength instead of hardcoded 2.0
- Extended seq_compiler to parse strength parameter
- Updated demo.seq with 2 parameterized instances:
* Line 38: strength=3.0 (stronger blur for particles)
* Line 48: strength=1.5 (subtle blur)
Technical details:
- Backward-compatible default constructor maintained
- Migrated from raw buffer to UniformBuffer<GaussianBlurUniforms>
- Shader replaces 'let base_size = 2.0' with 'uniforms.strength'
- Generated code creates GaussianBlurParams initialization
Testing:
- All 32/32 tests pass
- Demo runs without errors
- Generated code verified correct
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/gpu/demo_effects.h')
| -rw-r--r-- | src/gpu/demo_effects.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/gpu/demo_effects.h b/src/gpu/demo_effects.h index 36be118..6c8729d 100644 --- a/src/gpu/demo_effects.h +++ b/src/gpu/demo_effects.h @@ -77,12 +77,38 @@ class ParticleSprayEffect : public Effect { GpuBuffer particles_buffer_; }; +// Parameters for GaussianBlurEffect (set at construction time) +struct GaussianBlurParams { + float strength = 2.0f; // Default: 2.0 pixel blur radius +}; + +// Uniform data sent to GPU shader +struct GaussianBlurUniforms { + float time; // offset 0 + float beat; // offset 4 + float intensity; // offset 8 + float aspect_ratio; // offset 12 + float width; // offset 16 + float height; // offset 20 + float strength; // offset 24 + float _pad; // offset 28 +}; +static_assert(sizeof(GaussianBlurUniforms) == 32, + "GaussianBlurUniforms must be 32 bytes for WGSL alignment"); + class GaussianBlurEffect : public PostProcessEffect { public: + // Backward compatibility constructor (uses default params) GaussianBlurEffect(const GpuContext& ctx); + // New parameterized constructor + GaussianBlurEffect(const GpuContext& ctx, const GaussianBlurParams& params); void render(WGPURenderPassEncoder pass, float time, float beat, float intensity, float aspect_ratio) override; void update_bind_group(WGPUTextureView input_view) override; + + private: + GaussianBlurParams params_; + UniformBuffer<GaussianBlurUniforms> uniforms_; }; class SolarizeEffect : public PostProcessEffect { |
