diff options
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 |
