// This file is part of the 64k demo project. // It declares the concrete effects used in the demo. #pragma once #include "effect.h" #include "gpu.h" #include class HeptagonEffect : public Effect { public: HeptagonEffect(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 ParticlesEffect : public Effect { public: ParticlesEffect(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_; }; // Factory std::shared_ptr create_demo_sequence(WGPUDevice device, WGPUQueue queue, WGPUTextureFormat format);