Spazer/src/psychadelic-graphics/psychadelicColors.frag.glsl
2025-02-15 03:32:43 -08:00

62 lines
1.3 KiB
GLSL

#version 300 es
precision highp float;
uniform float u_time;
uniform float u_canvasWidth;
uniform float u_canvasHeight;
out vec4 fragColor;
// See https://thebookofshaders.com/10/
float random (vec2 st) {
return fract(sin(dot(st.xy, vec2(12.9898,78.233)))* 43758.5453123);
}
vec4 boxFade(vec4 inputColor, float boxSize, float period) {
float canvasSize = max(u_canvasWidth, u_canvasHeight);
vec2 uv = gl_FragCoord.xy/vec2(canvasSize, canvasSize);
uv.x = floor(uv.x / boxSize) * boxSize;
uv.y = floor(uv.y / boxSize) * boxSize;
float rand = random(uv);
float mask = mod(u_time / period, 2.4);
return rand < mask ? inputColor : vec4(0.0, 0.0, 0.0, 1.0);
}
vec2 pixellate(vec2 inputVec, float size) {
return vec2(
floor(inputVec.x / size) * size,
floor(inputVec.y / size) * size
);
}
void pixelatedSinWave() {
vec2 uv = gl_FragCoord.xy/vec2(u_canvasWidth, u_canvasHeight);
float amount = 1.0/(u_time * 9.0);
uv = pixellate(uv, amount);
//vec4 outputColor = vec4(uv.x, 0., uv.y, 1.0);
float dist = distance(uv, vec2(0.5, 0.5));
float curve = sin(dist * 60.0);
vec4 outputColor = vec4(0.5, 0.1, curve, 1.0);
float size = 0.01;
float period = 1.0;
fragColor = boxFade(outputColor, size, period);
}
void main() {
pixelatedSinWave();
}