// Gaussian blur effect v2 - single-pass blur #pragma once #include "gpu/effect.h" #include "gpu/uniform_helper.h" struct GaussianBlurParams { float strength = 1.0f; float strength_audio = 0.5f; float stretch = 1.0f; float _pad = 0.0f; }; static_assert(sizeof(GaussianBlurParams) == 16, "GaussianBlurParams must be 16 bytes"); class GaussianBlurEffect : public Effect { public: GaussianBlurEffect(const GpuContext& ctx, const std::vector& inputs, const std::vector& outputs); void render(WGPUCommandEncoder encoder, const UniformsSequenceParams& params, NodeRegistry& nodes) override; private: WGPURenderPipeline pipeline_; WGPUBindGroup bind_group_; WGPUSampler sampler_; GaussianBlurParams blur_params_; UniformBuffer params_buffer_; UniformBuffer uniforms_buffer_; };