diff --git a/shaders/font.frag b/shaders/font.frag index 496f9df6..197c23bb 100644 --- a/shaders/font.frag +++ b/shaders/font.frag @@ -14,6 +14,7 @@ uniform sampler2D font; uniform float time; +uniform vec2 resolution; in vec2 uv; flat in int glyph_ch; @@ -25,6 +26,11 @@ float map01(float x) return (x + 1) / 2.0; } +vec3 hsl2rgb(vec3 c) { + vec3 rgb = clamp(abs(mod(c.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0); + return c.z + c.y * (rgb-0.5)*(1.0-abs(2.0*c.z-1.0)); +} + void main() { int ch = glyph_ch; if (!(ASCII_DISPLAY_LOW <= ch && ch <= ASCII_DISPLAY_HIGH)) { @@ -39,10 +45,7 @@ void main() { vec2 t = pos + size * uv; vec4 tc = texture(font, t); - vec4 rainbow = vec4( - map01(sin(time + uv.x)), - map01(cos(time + uv.y)), - map01(sin(time + uv.x + uv.y)), - 1.0); + vec2 frag_uv = gl_FragCoord.xy / resolution; + vec4 rainbow = vec4(hsl2rgb(vec3((time + frag_uv.x + frag_uv.y), 0.5, 0.5)), 1.0); gl_FragColor = glyph_bg_color * (1.0 - tc.x) + tc.x * glyph_fg_color * rainbow; }