uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; #define PI 3.14159265359 mat2 scale(vec2 scale) { return mat2(scale.x, 0.0, 0.0, scale.y); } float box(in vec2 st, in vec2 size) { size = vec2(0.5) - size * 0.5; vec2 uv = smoothstep(size, size + vec2(0.001), st); uv *= smoothstep(size, size+vec2(0.001), vec2(1.0) - st); return uv.x * uv.y; } float cross(in vec2 st, float size) { return box(st, vec2(size, size / 4.0)) + box(st, vec2(size / 4.0, size)); } mat2 rotate2d(float angle) { return mat2(cos(angle), -sin(angle), sin(angle), cos(angle)); } void main() { vec2 st = gl_FragCoord.xy / u_resolution.xy; vec3 color = vec3(0.0); st -= vec2(0.5); st = scale(vec2(sin(u_time) + 1.0)) * st; st = rotate2d(sin(u_time) * PI) * st; st += vec2(0.5); color += vec3(cross(st, 0.4)); gl_FragColor = vec4(color, 1.0); }