diff options
Diffstat (limited to 'src/gpu/effects/circle_mask_effect.h')
| -rw-r--r-- | src/gpu/effects/circle_mask_effect.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/gpu/effects/circle_mask_effect.h b/src/gpu/effects/circle_mask_effect.h new file mode 100644 index 0000000..57f2389 --- /dev/null +++ b/src/gpu/effects/circle_mask_effect.h @@ -0,0 +1,50 @@ +// This file is part of the 64k demo project. +// It defines the CircleMaskEffect class for masking system demonstration. +// Creates a circular mask and renders green outside the circle. + +#ifndef CIRCLE_MASK_EFFECT_H_ +#define CIRCLE_MASK_EFFECT_H_ + +#include "gpu/effect.h" +#include "gpu/uniform_helper.h" + +class CircleMaskEffect : public Effect { + public: + CircleMaskEffect(const GpuContext& ctx, float radius = 0.4f); + ~CircleMaskEffect() override; + + void init(MainSequence* demo) override; + 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: + struct ComputeUniforms { + float radius; + float aspect_ratio; + float width; + float height; + }; + + struct RenderUniforms { + float width; + float height; + float _pad1; + float _pad2; + }; + + MainSequence* demo_ = nullptr; + float radius_; + + WGPURenderPipeline compute_pipeline_ = nullptr; + WGPUBindGroup compute_bind_group_ = nullptr; + UniformBuffer<ComputeUniforms> compute_uniforms_; + + WGPURenderPipeline render_pipeline_ = nullptr; + WGPUBindGroup render_bind_group_ = nullptr; + WGPUSampler mask_sampler_ = nullptr; + UniformBuffer<RenderUniforms> render_uniforms_; +}; + +#endif /* CIRCLE_MASK_EFFECT_H_ */ |
