// 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 compute_uniforms_; WGPURenderPipeline render_pipeline_ = nullptr; WGPUBindGroup render_bind_group_ = nullptr; WGPUSampler mask_sampler_ = nullptr; UniformBuffer render_uniforms_; }; #endif /* CIRCLE_MASK_EFFECT_H_ */