asciiart.fragment.fx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Samplers.
  2. varying vec2 vUV;
  3. uniform sampler2D textureSampler;
  4. uniform sampler2D asciiArtFont;
  5. // Infos.
  6. uniform vec4 asciiArtFontInfos;
  7. uniform vec4 asciiArtOptions;
  8. // Transform color to luminance.
  9. float getLuminance(vec3 color)
  10. {
  11. return clamp(dot(color, vec3(0.2126, 0.7152, 0.0722)), 0., 1.);
  12. }
  13. // Main functions.
  14. void main(void)
  15. {
  16. float caracterSize = asciiArtFontInfos.x;
  17. float numChar = asciiArtFontInfos.y - 1.0;
  18. float fontx = asciiArtFontInfos.z;
  19. float fonty = asciiArtFontInfos.w;
  20. float screenx = asciiArtOptions.x;
  21. float screeny = asciiArtOptions.y;
  22. float tileX = float(floor((gl_FragCoord.x) / caracterSize)) * caracterSize / screenx;
  23. float tileY = float(floor((gl_FragCoord.y) / caracterSize)) * caracterSize / screeny;
  24. vec2 tileUV = vec2(tileX, tileY);
  25. vec4 tileColor = texture2D(textureSampler, tileUV);
  26. vec4 baseColor = texture2D(textureSampler, vUV);
  27. float tileLuminance = getLuminance(tileColor.rgb);
  28. float offsetx = (float(floor(tileLuminance * numChar))) * caracterSize / fontx;
  29. float offsety = 0.0;
  30. float x = float(mod(gl_FragCoord.x, caracterSize)) / fontx;
  31. float y = float(mod(gl_FragCoord.y, caracterSize)) / fonty;
  32. vec4 finalColor = texture2D(asciiArtFont, vec2(offsetx + x, offsety + (caracterSize / fonty - y)));
  33. finalColor.rgb *= tileColor.rgb;
  34. finalColor.a = 1.0;
  35. finalColor = mix(finalColor, tileColor, asciiArtOptions.w);
  36. finalColor = mix(finalColor, baseColor, asciiArtOptions.z);
  37. gl_FragColor = finalColor;
  38. }