struct Time { value : f32; } struct Uniforms { scale : f32; offsetX : f32; offsetY : f32; scalar : f32; scalarOffset : f32; } @binding(0) @group(0) var time : Time; @binding(1) @group(0) var uniforms : Uniforms; struct VertexOutput { @builtin(position) Position : vec4; @location(0) v_color : vec4; } @stage(vertex) fn vert_main(@location(0) position : vec4, @location(1) color : vec4) -> VertexOutput { var fade : f32 = ((uniforms.scalarOffset + ((time.value * uniforms.scalar) / 10.0)) % 1.0); if ((fade < 0.5)) { fade = (fade * 2.0); } else { fade = ((1.0 - fade) * 2.0); } var xpos : f32 = (position.x * uniforms.scale); var ypos : f32 = (position.y * uniforms.scale); var angle : f32 = ((3.141590118 * 2.0) * fade); var xrot : f32 = ((xpos * cos(angle)) - (ypos * sin(angle))); var yrot : f32 = ((xpos * sin(angle)) + (ypos * cos(angle))); xpos = (xrot + uniforms.offsetX); ypos = (yrot + uniforms.offsetY); var output : VertexOutput; output.v_color = (vec4(fade, (1.0 - fade), 0.0, 1.0) + color); output.Position = vec4(xpos, ypos, 0.0, 1.0); return output; } @stage(fragment) fn frag_main(@location(0) v_color : vec4) -> @location(0) vec4 { return v_color; }