struct Uniforms { audio_peak : f32, }; @group(0) @binding(0) var uniforms : Uniforms; @vertex fn vs_main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4 { let num_sides = 7.0; let angle = f32(vertex_index) * 2.0 * PI / num_sides; // Base size and pulsating scale based on audio peak let base_scale = 0.5; let pulse_scale = 0.2 * uniforms.audio_peak; let scale = base_scale + pulse_scale; // Vertices for a heptagon (fan from center) if (vertex_index == 0) { return vec4(0.0, 0.0, 0.0, 1.0); } // Center else { // Subsequent points connect to the center and previous point let angle = f32(vertex_index) * 2.0 * PI / num_sides; let x = scale * cos(angle); let y = scale * sin(angle); return vec4(x, y, 0.0, 1.0); } } @fragment fn fs_main() -> @location(0) vec4 { // Simple color, maybe with a hue shift based on audio peak let hue = uniforms.audio_peak * 0.5; // Adjust as needed for desired color range let r = sin(hue + 0.0) * 0.5 + 0.5; let g = sin(hue + 2.0) * 0.5 + 0.5; let b = sin(hue + 4.0) * 0.5 + 0.5; return vec4(r, g, b, 1.0); }