From c79ebff06ae74135c5f67ecc01d5bb55aeb5eda9 Mon Sep 17 00:00:00 2001 From: skal Date: Mon, 16 Feb 2026 17:04:41 +0100 Subject: fix: calculate beat_phase for FlashEffect and refactor uniforms - seq_compiler.py: Calculate beat_phase from beat_time (was hardcoded 0.0f) - Refactor: Replace CommonPostProcessUniforms with UniformsSequenceParams - Remove duplicate struct definition in post_process_helper.h - Update all CNN effects and tests to use unified uniform struct - Fixes FlashEffect showing solid white instead of flashing to beat Co-Authored-By: Claude Sonnet 4.5 --- tools/cnn_test.cc | 6 +++--- tools/seq_compiler.py | 6 ++++-- tools/shadertoy/template.cc | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) (limited to 'tools') diff --git a/tools/cnn_test.cc b/tools/cnn_test.cc index d88956d..a209cdf 100644 --- a/tools/cnn_test.cc +++ b/tools/cnn_test.cc @@ -1332,7 +1332,7 @@ int main(int argc, char** argv) { // Create uniform buffers const WGPUBufferDescriptor common_uniform_desc = { .usage = WGPUBufferUsage_Uniform | WGPUBufferUsage_CopyDst, - .size = sizeof(CommonPostProcessUniforms), + .size = sizeof(UniformsSequenceParams), }; WGPUBuffer common_uniform_buffer = wgpuDeviceCreateBuffer(device, &common_uniform_desc); @@ -1384,7 +1384,7 @@ int main(int argc, char** argv) { printf("Processing layer %d/%d...\n", layer + 1, NUM_LAYERS); // Update uniforms - CommonPostProcessUniforms common_u = { + UniformsSequenceParams common_u = { .resolution = {static_cast(width), static_cast(height)}, .aspect_ratio = static_cast(width) / static_cast(height), .time = 0.0f, @@ -1410,7 +1410,7 @@ int main(int argc, char** argv) { BindGroupBuilder() .sampler(0, sampler) .texture(1, current_input) - .buffer(2, common_uniform_buffer, sizeof(CommonPostProcessUniforms)) + .buffer(2, common_uniform_buffer, sizeof(UniformsSequenceParams)) .buffer(3, layer_params_buffer, sizeof(CNNv1LayerParams)) .texture(4, original_view) .build(device, bgl); diff --git a/tools/seq_compiler.py b/tools/seq_compiler.py index 6b72ebd..3b8d126 100755 --- a/tools/seq_compiler.py +++ b/tools/seq_compiler.py @@ -516,7 +516,8 @@ void RenderTimeline(WGPUCommandEncoder encoder, float time, int width, int heigh float beat_time, float audio_intensity) { Sequence* seq = GetActiveSequence(time); if (seq) { - seq->preprocess(time, beat_time, 0.0f, audio_intensity); + float beat_phase = fmodf(beat_time, 1.0f); + seq->preprocess(time, beat_time, beat_phase, audio_intensity); seq->render_effects(encoder); } } @@ -584,7 +585,8 @@ void RenderTimeline(WGPUSurface surface, float time, int width, int height, seq->set_sink_view(g_sink_view); // Update uniforms via preprocess - seq->preprocess(time, beat_time, 0.0f, audio_intensity); + float beat_phase = fmodf(beat_time, 1.0f); + seq->preprocess(time, beat_time, beat_phase, audio_intensity); WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(ctx->device, nullptr); diff --git a/tools/shadertoy/template.cc b/tools/shadertoy/template.cc index 7636c0a..56b4ab5 100644 --- a/tools/shadertoy/template.cc +++ b/tools/shadertoy/template.cc @@ -83,7 +83,7 @@ void ShaderToyEffect::init(MainSequence* demo) { {.binding = 1, .textureView = prev_view}, {.binding = 2, .buffer = uniforms_.get().buffer, - .size = sizeof(CommonPostProcessUniforms)}, + .size = sizeof(UniformsSequenceParams)}, {.binding = 3, .buffer = params_.get().buffer, .size = sizeof(ShaderToyParams)}, @@ -98,7 +98,7 @@ void ShaderToyEffect::init(MainSequence* demo) { void ShaderToyEffect::render(WGPURenderPassEncoder pass, float time, float beat, float intensity, float aspect_ratio) { - const CommonPostProcessUniforms uniforms = { + const UniformsSequenceParams uniforms = { .resolution = {static_cast(width_), static_cast(height_)}, .aspect_ratio = aspect_ratio, .time = time, -- cgit v1.2.3