2#define DO_RED
5float sdCircle(vec2 p, float r) {
6 return length(p) - r;
7}
9float sdBox(vec2 p, vec2 b) {
10 vec2 d = abs(p) - b;
11 return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
12}
14void main() {
15 vec2 uv = (fragTexCoord * 2.0 - 1.0) * vec2(iResolution.x / iResolution.y, 1.0);
16 vec2 m = (iMouse / iResolution - 0.5) * 2.0 * vec2(iResolution.x / iResolution.y, 1.0);
17 m.y = -m.y; // Raylib
18 float t = iTime * 0.8;
20 /* rotating box */
21 float angle = t;
22 vec2 rot = vec2(cos(angle) * uv.x - sin(angle) * uv.y,
23 sin(angle) * uv.x + cos(angle) * uv.y);
24 float box = sdBox(rot, vec2(0.3));
26 /* pulsing circle that follows mouse */
27 float pulse = 0.05 + 0.02 * sin(iTime * 3.0);
28 float circle = sdCircle(uv - m, pulse);
30 /* combine */
31 float d = min(box, circle);
33 /* coloring */
34#ifdef DO_RED
35 vec3 col = mix(vec3(0.05), vec3(1.0, 0.2, 0.1), 1.0 - smoothstep(0.0, 0.01, d));
36 col += vec3(0.1, 0.4, 1.0) * (1.0 - smoothstep(0.0, 0.01, abs(d) - 0.005));
37 col += min(0.03 / abs(d), 1.0) * vec3(1.0, 0.3, 0.2);
38#else
39 vec3 col = mix(vec3(0.05), vec3(0.2, 0.6, 1.0), 1.0 - smoothstep(0.0, 0.01, d));
40 col += vec3(1.0, 0.4, 0.1) * (1.0 - smoothstep(0.0, 0.01, abs(d) - 0.005));
41 col += min(0.03 / abs(d), 1.0) * vec3(0.3, 0.6, 1.0);
42#endif
44 finalColor = vec4(col, 1.0);
45}
index : shaderview
Low effort shader viewer