// 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/effects/post_process_helper.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 CircleMaskParams { float radius; float _pad[3]; }; static_assert(sizeof(CircleMaskParams) == 16, "CircleMaskParams must be 16 bytes for WGSL alignment"); MainSequence* demo_ = nullptr; float radius_; WGPURenderPipeline compute_pipeline_ = nullptr; WGPUBindGroup compute_bind_group_ = nullptr; UniformBuffer compute_params_; WGPURenderPipeline render_pipeline_ = nullptr; WGPUBindGroup render_bind_group_ = nullptr; WGPUSampler mask_sampler_ = nullptr; }; #endif /* CIRCLE_MASK_EFFECT_H_ */