free_font.frag 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #version 330 core
  2. #define FONT_WIDTH 128
  3. #define FONT_HEIGHT 64
  4. #define FONT_COLS 18
  5. #define FONT_ROWS 7
  6. #define FONT_CH_W (FONT_WIDTH / FONT_COLS)
  7. #define FONT_CH_H (FONT_HEIGHT / FONT_ROWS)
  8. #define FONT_CH_W_UV (float(FONT_CH_W) / float(FONT_WIDTH))
  9. #define FONT_CH_H_UV (float(FONT_CH_H) / float(FONT_HEIGHT))
  10. uniform sampler2D font;
  11. uniform float time;
  12. uniform vec2 resolution;
  13. in vec2 uv;
  14. in vec2 glyph_uv_pos;
  15. in vec2 glyph_uv_size;
  16. in vec4 glyph_fg_color;
  17. in vec4 glyph_bg_color;
  18. float map01(float x)
  19. {
  20. return (x + 1) / 2;
  21. }
  22. vec3 hsl2rgb( in vec3 c )
  23. {
  24. vec3 rgb = clamp( abs(mod(c.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0,
  25. 0.0, 1.0 );
  26. return c.z + c.y * (rgb-0.5)*(1.0-abs(2.0*c.z-1.0));
  27. }
  28. void main() {
  29. // vec2 t = glyph_uv_pos + glyph_uv_size * uv;
  30. // gl_FragColor = vec4(texture(font, t).x, 0, 0, 1);
  31. vec2 t = glyph_uv_pos + glyph_uv_size * uv;
  32. vec4 tc = texture(font, t);
  33. vec2 frag_uv = gl_FragCoord.xy / resolution;
  34. vec4 rainbow = vec4(hsl2rgb(vec3((time + frag_uv.x + frag_uv.y), 0.5, 0.5)), 1.0);
  35. gl_FragColor = glyph_bg_color * (1.0 - tc.x) + tc.x * glyph_fg_color * rainbow;
  36. }