summaryrefslogtreecommitdiff
path: root/src/gpu/demo_effects.h
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-11 11:34:08 +0100
committerskal <pascal.massimino@gmail.com>2026-02-11 11:34:08 +0100
commitd378da77eec4d506bc01e4c08c38644d72969cc7 (patch)
tree5cc38517320ba3aefb46a2f9c939c9fdc8ed5fae /src/gpu/demo_effects.h
parent4da0a3a5369142078fd7c681e3f0f1817bd6e2f3 (diff)
refactor: Simplify effect render API and fix uniform initialization
Root cause: Uniform buffers created but not initialized before bind group creation, causing undefined UV coordinates in circle_mask_compute.wgsl. Changes: - Add get_common_uniforms() helper to Effect base class - Refactor render()/compute() signatures: 5 params → CommonPostProcessUniforms& - Fix uninitialized uniforms in CircleMaskEffect and CNNEffect - Update all 19 effect implementations and headers - Fix WGSL syntax error in FlashEffect (u.audio_intensity → audio_intensity) - Update test files (test_sequence.cc) Benefits: - Cleaner API: construct uniforms once per frame, reuse across effects - More maintainable: CommonPostProcessUniforms changes need no call site updates - Fixes UV coordinate bug in circle_mask_compute.wgsl All 36 tests passing (100%) handoff(Claude): Effect API refactor complete
Diffstat (limited to 'src/gpu/demo_effects.h')
-rw-r--r--src/gpu/demo_effects.h44
1 files changed, 22 insertions, 22 deletions
diff --git a/src/gpu/demo_effects.h b/src/gpu/demo_effects.h
index 1ccf930..8cdf557 100644
--- a/src/gpu/demo_effects.h
+++ b/src/gpu/demo_effects.h
@@ -33,8 +33,8 @@ struct Particle {
class HeptagonEffect : public Effect {
public:
HeptagonEffect(const GpuContext& ctx);
- void render(WGPURenderPassEncoder pass, float time, float beat,
- float intensity, float aspect_ratio) override;
+ void render(WGPURenderPassEncoder pass,
+ const CommonPostProcessUniforms& uniforms) override;
private:
RenderPass pass_;
@@ -43,10 +43,10 @@ class HeptagonEffect : public Effect {
class ParticlesEffect : public Effect {
public:
ParticlesEffect(const GpuContext& ctx);
- void compute(WGPUCommandEncoder encoder, float time, float beat,
- float intensity, float aspect_ratio) override;
- void render(WGPURenderPassEncoder pass, float time, float beat,
- float intensity, float aspect_ratio) override;
+ void compute(WGPUCommandEncoder encoder,
+ const CommonPostProcessUniforms& uniforms) override;
+ void render(WGPURenderPassEncoder pass,
+ const CommonPostProcessUniforms& uniforms) override;
private:
ComputePass compute_pass_;
@@ -65,8 +65,8 @@ class PassthroughEffect : public PostProcessEffect {
class MovingEllipseEffect : public Effect {
public:
MovingEllipseEffect(const GpuContext& ctx);
- void render(WGPURenderPassEncoder pass, float time, float beat,
- float intensity, float aspect_ratio) override;
+ void render(WGPURenderPassEncoder pass,
+ const CommonPostProcessUniforms& uniforms) override;
private:
RenderPass pass_;
@@ -75,10 +75,10 @@ class MovingEllipseEffect : public Effect {
class ParticleSprayEffect : public Effect {
public:
ParticleSprayEffect(const GpuContext& ctx);
- void compute(WGPUCommandEncoder encoder, float time, float beat,
- float intensity, float aspect_ratio) override;
- void render(WGPURenderPassEncoder pass, float time, float beat,
- float intensity, float aspect_ratio) override;
+ void compute(WGPUCommandEncoder encoder,
+ const CommonPostProcessUniforms& uniforms) override;
+ void render(WGPURenderPassEncoder pass,
+ const CommonPostProcessUniforms& uniforms) override;
private:
ComputePass compute_pass_;
@@ -100,8 +100,8 @@ class GaussianBlurEffect : public PostProcessEffect {
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 render(WGPURenderPassEncoder pass,
+ const CommonPostProcessUniforms& uniforms) override;
void update_bind_group(WGPUTextureView input_view) override;
private:
@@ -112,8 +112,8 @@ class GaussianBlurEffect : public PostProcessEffect {
class SolarizeEffect : public PostProcessEffect {
public:
SolarizeEffect(const GpuContext& ctx);
- void render(WGPURenderPassEncoder pass, float time, float beat,
- float intensity, float aspect_ratio) override;
+ void render(WGPURenderPassEncoder pass,
+ const CommonPostProcessUniforms& uniforms) override;
void update_bind_group(WGPUTextureView input_view) override;
private:
@@ -129,8 +129,8 @@ class VignetteEffect : public PostProcessEffect {
public:
VignetteEffect(const GpuContext& ctx);
VignetteEffect(const GpuContext& ctx, const VignetteParams& params);
- void render(WGPURenderPassEncoder pass, float time, float beat,
- float intensity, float aspect_ratio) override;
+ void render(WGPURenderPassEncoder pass,
+ const CommonPostProcessUniforms& uniforms) override;
void update_bind_group(WGPUTextureView input_view) override;
private:
@@ -151,8 +151,8 @@ class ChromaAberrationEffect : public PostProcessEffect {
// New parameterized constructor
ChromaAberrationEffect(const GpuContext& ctx,
const ChromaAberrationParams& params);
- void render(WGPURenderPassEncoder pass, float time, float beat,
- float intensity, float aspect_ratio) override;
+ void render(WGPURenderPassEncoder pass,
+ const CommonPostProcessUniforms& uniforms) override;
void update_bind_group(WGPUTextureView input_view) override;
private:
@@ -171,8 +171,8 @@ class DistortEffect : public PostProcessEffect {
public:
DistortEffect(const GpuContext& ctx);
DistortEffect(const GpuContext& ctx, const DistortParams& params);
- void render(WGPURenderPassEncoder pass, float time, float beat,
- float intensity, float aspect_ratio) override;
+ void render(WGPURenderPassEncoder pass,
+ const CommonPostProcessUniforms& uniforms) override;
void update_bind_group(WGPUTextureView input_view) override;
private: