diff options
Diffstat (limited to 'src/effects/distort_effect.cc')
| -rw-r--r-- | src/effects/distort_effect.cc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/effects/distort_effect.cc b/src/effects/distort_effect.cc new file mode 100644 index 0000000..97622b2 --- /dev/null +++ b/src/effects/distort_effect.cc @@ -0,0 +1,36 @@ +// This file is part of the 64k demo project. +// It implements the DistortEffect. + +#include "gpu/demo_effects.h" +#include "gpu/gpu.h" + +// --- DistortEffect --- +DistortEffect::DistortEffect(const GpuContext& ctx) + : DistortEffect(ctx, DistortParams()) { +} + +DistortEffect::DistortEffect(const GpuContext& ctx, const DistortParams& params) + : PostProcessEffect(ctx), params_(params) { + params_buffer_.init(ctx_.device); + pipeline_ = create_post_process_pipeline(ctx_.device, ctx_.format, + distort_shader_wgsl); +} + +void DistortEffect::render(WGPURenderPassEncoder pass, + const CommonPostProcessUniforms& uniforms) { + // Populate CommonPostProcessUniforms + uniforms_.update(ctx_.queue, uniforms); + + // Populate DistortParams + const DistortParams distort_p = { + .strength = params_.strength, + .speed = params_.speed, + }; + params_buffer_.update(ctx_.queue, distort_p); + + PostProcessEffect::render(pass, uniforms); +} + +void DistortEffect::update_bind_group(WGPUTextureView v) { + pp_update_bind_group(ctx_.device, pipeline_, &bind_group_, v, uniforms_.get(), params_buffer_); +}
\ No newline at end of file |
