summaryrefslogtreecommitdiff
path: root/src/gpu/demo_effects.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/demo_effects.h')
-rw-r--r--src/gpu/demo_effects.h90
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