@group(0) @binding(0) var smplr: sampler; @group(0) @binding(1) var txt: texture_2d; struct Uniforms { time: f32, beat: f32, intensity: f32, aspect_ratio: f32, resolution: vec2, }; @group(0) @binding(2) var uniforms: Uniforms; @vertex fn vs_main(@builtin(vertex_index) i: u32) -> @builtin(position) vec4 { var pos = array, 3>( vec2(-1, -1), vec2(3, -1), vec2(-1, 3) ); return vec4(pos[i], 0.0, 1.0); } @fragment fn fs_main(@builtin(position) p: vec4) -> @location(0) vec4 { let uv = p.xy / uniforms.resolution; var col = textureSample(txt, smplr, uv); // Patterns are 2 seconds long (120 BPM, 4 beats) let pattern_num = u32(uniforms.time / 2.0); let is_even_pattern = (pattern_num % 2u) == 0u; // Reduced threshold range for subtler effect let thr = 0.4 + 0.15 * sin(uniforms.time); let solarize_strength = 0.4; // Reduced from 1.0 for less saturation if (is_even_pattern) { // Even patterns: Subtle red-orange tint if (col.r < thr) { col.r = mix(col.r, 1.0 - col.r, solarize_strength); } if (col.g < thr) { col.g = mix(col.g, 1.0 - col.g * 0.7, solarize_strength * 0.7); } if (col.b < thr) { col.b = mix(col.b, col.b * 0.5, solarize_strength); } } else { // Odd patterns: Subtle blue-cyan tint if (col.r < thr) { col.r = mix(col.r, col.r * 0.6, solarize_strength); } if (col.g < thr) { col.g = mix(col.g, 1.0 - col.g * 0.8, solarize_strength * 0.8); } if (col.b < thr) { col.b = mix(col.b, 1.0 - col.b, solarize_strength); } } return col; }