summaryrefslogtreecommitdiff
path: root/src/gpu/demo_effects.h
blob: 81321d9b1866c49bdc74446953c9189f130c2871 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 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 <memory>

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<Sequence> create_demo_sequence(WGPUDevice device,
                                               WGPUQueue queue,
                                               WGPUTextureFormat format);