summaryrefslogtreecommitdiff
path: root/src/effects/distort_effect.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/effects/distort_effect.cc')
-rw-r--r--src/effects/distort_effect.cc36
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