| struct Time { |
| value : f32, |
| } |
| |
| struct Uniforms { |
| scale : f32, |
| offsetX : f32, |
| offsetY : f32, |
| scalar : f32, |
| scalarOffset : f32, |
| } |
| |
| @binding(0) @group(0) var<uniform> time : Time; |
| |
| @binding(1) @group(0) var<uniform> uniforms : Uniforms; |
| |
| struct VertexOutput { |
| @builtin(position) |
| Position : vec4<f32>, |
| @location(0) |
| v_color : vec4<f32>, |
| } |
| |
| @vertex |
| fn vert_main(@location(0) position : vec4<f32>, @location(1) color : vec4<f32>) -> 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<f32>(fade, (1.0 - fade), 0.0, 1.0) + color); |
| output.Position = vec4<f32>(xpos, ypos, 0.0, 1.0); |
| return output; |
| } |
| |
| @fragment |
| fn frag_main(@location(0) v_color : vec4<f32>) -> @location(0) vec4<f32> { |
| return v_color; |
| } |