summaryrefslogtreecommitdiff
path: root/src/gpu/post_process_helper.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/post_process_helper.h')
-rw-r--r--src/gpu/post_process_helper.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/gpu/post_process_helper.h b/src/gpu/post_process_helper.h
new file mode 100644
index 0000000..1c649e7
--- /dev/null
+++ b/src/gpu/post_process_helper.h
@@ -0,0 +1,37 @@
+// This file is part of the 64k demo project.
+// It declares helper functions for post-processing effects.
+
+#pragma once
+
+#include "gpu/gpu.h"
+#include "util/mini_math.h"
+
+// Uniform data common to all post-processing effects
+struct CommonPostProcessUniforms {
+ vec2 resolution; // Screen dimensions
+ float aspect_ratio; // Width/height ratio
+ float time; // Physical time in seconds (unaffected by tempo)
+ float beat_time; // Musical time in beats (absolute, tempo-scaled)
+ float beat_phase; // Fractional beat (0.0-1.0 within current beat)
+ float audio_intensity;// Audio peak for beat sync
+ float _pad; // Padding for 16-byte alignment
+};
+static_assert(sizeof(CommonPostProcessUniforms) == 32,
+ "CommonPostProcessUniforms must be 32 bytes for WGSL alignment");
+
+// Standard post-process bind group layout (group 0):
+#define PP_BINDING_SAMPLER 0 // Sampler for input texture
+#define PP_BINDING_TEXTURE 1 // Input texture (previous render pass)
+#define PP_BINDING_UNIFORMS 2 // Custom uniforms buffer
+#define PP_BINDING_EFFECT_PARAMS 3 // Effect-specific parameters
+
+// Helper to create a standard post-processing pipeline
+// Uniforms are accessible to both vertex and fragment shaders
+WGPURenderPipeline create_post_process_pipeline(WGPUDevice device,
+ WGPUTextureFormat format,
+ const char* shader_code);
+
+// Helper to update bind group for post-processing effects
+void pp_update_bind_group(WGPUDevice device, WGPURenderPipeline pipeline,
+ WGPUBindGroup* bind_group, WGPUTextureView input_view,
+ GpuBuffer uniforms, GpuBuffer effect_params);