diff options
| author | skal <pascal.massimino@gmail.com> | 2026-01-31 17:05:15 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-01-31 17:05:15 +0100 |
| commit | a958c6ca8dd48f642570037df127a4b23c984d82 (patch) | |
| tree | 9f1a3293858c00cbce37c75e573de0149edbd3ec /src/gpu/demo_effects.h | |
| parent | 843de420978cc4c976a2b71cf13c940685df8f56 (diff) | |
feat: Multi-pass rendering architecture and effect stubs
Implements a post-processing pipeline using offscreen framebuffers. Adds stubs for MovingEllipse, ParticleSpray, GaussianBlur, Solarize, Distort, and ChromaAberration effects. Updates MainSequence to orchestrate the scene pass and post-processing chain.
Diffstat (limited to 'src/gpu/demo_effects.h')
| -rw-r--r-- | src/gpu/demo_effects.h | 90 |
1 files changed, 88 insertions, 2 deletions
diff --git a/src/gpu/demo_effects.h b/src/gpu/demo_effects.h index befb1fe..35ebe37 100644 --- a/src/gpu/demo_effects.h +++ b/src/gpu/demo_effects.h @@ -3,9 +3,18 @@ #pragma once #include "effect.h" -#include "gpu.h" +#include "gpu/gpu.h" #include <memory> +static const int NUM_PARTICLES = 10000; + +struct Particle { + float pos[4]; + float vel[4]; + float rot[4]; + float color[4]; +}; + class HeptagonEffect : public Effect { public: HeptagonEffect(WGPUDevice device, WGPUQueue queue, WGPUTextureFormat format); @@ -34,6 +43,83 @@ private: GpuBuffer uniforms_; }; +class PassthroughEffect : public PostProcessEffect { +public: + PassthroughEffect(WGPUDevice device, WGPUTextureFormat format); + void update_bind_group(WGPUTextureView input_view) override; + +private: + WGPUDevice device_; +}; + +class MovingEllipseEffect : public Effect { +public: + MovingEllipseEffect(WGPUDevice device, WGPUQueue queue, + WGPUTextureFormat format); + void render(WGPURenderPassEncoder pass, float time, float beat, + float intensity, float aspect_ratio) override; + +private: + WGPUQueue queue_; + RenderPass pass_; + GpuBuffer uniforms_; +}; + +class ParticleSprayEffect : public Effect { +public: + ParticleSprayEffect(WGPUDevice device, WGPUQueue queue, + WGPUTextureFormat format); + 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; + +private: + WGPUQueue queue_; + ComputePass compute_pass_; + RenderPass render_pass_; + GpuBuffer particles_buffer_; + GpuBuffer uniforms_; +}; + +class GaussianBlurEffect : public PostProcessEffect { +public: + GaussianBlurEffect(WGPUDevice device, WGPUQueue queue, + WGPUTextureFormat format); + void update_bind_group(WGPUTextureView input_view) override; + +private: + WGPUDevice device_; +}; + +class SolarizeEffect : public PostProcessEffect { +public: + SolarizeEffect(WGPUDevice device, WGPUQueue queue, WGPUTextureFormat format); + void update_bind_group(WGPUTextureView input_view) override; + +private: + WGPUDevice device_; +}; + +class DistortEffect : public PostProcessEffect { +public: + DistortEffect(WGPUDevice device, WGPUQueue queue, WGPUTextureFormat format); + void update_bind_group(WGPUTextureView input_view) override; + +private: + WGPUDevice device_; +}; + +class ChromaAberrationEffect : public PostProcessEffect { +public: + ChromaAberrationEffect(WGPUDevice device, WGPUQueue queue, + WGPUTextureFormat format); + void update_bind_group(WGPUTextureView input_view) override; + +private: + WGPUDevice device_; +}; + // Auto-generated function to populate the timeline void LoadTimeline(MainSequence &main_seq, WGPUDevice device, WGPUQueue queue, - WGPUTextureFormat format); + WGPUTextureFormat format);
\ No newline at end of file |
