diff options
Diffstat (limited to 'src/gpu/post_process_helper.h')
| -rw-r--r-- | src/gpu/post_process_helper.h | 37 |
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); |
