1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // Samplers.
- varying vec2 vUV;
- uniform sampler2D textureSampler;
- uniform sampler2D asciiArtFont;
- // Infos.
- uniform vec4 asciiArtFontInfos;
- uniform vec4 asciiArtOptions;
- // Transform color to luminance.
- float getLuminance(vec3 color)
- {
- return clamp(dot(color, vec3(0.2126, 0.7152, 0.0722)), 0., 1.);
- }
- // Main functions.
- void main(void)
- {
- float caracterSize = asciiArtFontInfos.x;
- float numChar = asciiArtFontInfos.y - 1.0;
- float fontx = asciiArtFontInfos.z;
- float fonty = asciiArtFontInfos.w;
- float screenx = asciiArtOptions.x;
- float screeny = asciiArtOptions.y;
- float tileX = float(floor((gl_FragCoord.x) / caracterSize)) * caracterSize / screenx;
- float tileY = float(floor((gl_FragCoord.y) / caracterSize)) * caracterSize / screeny;
- vec2 tileUV = vec2(tileX, tileY);
- vec4 tileColor = texture2D(textureSampler, tileUV);
- vec4 baseColor = texture2D(textureSampler, vUV);
- float tileLuminance = getLuminance(tileColor.rgb);
- float offsetx = (float(floor(tileLuminance * numChar))) * caracterSize / fontx;
- float offsety = 0.0;
- float x = float(mod(gl_FragCoord.x, caracterSize)) / fontx;
- float y = float(mod(gl_FragCoord.y, caracterSize)) / fonty;
- vec4 finalColor = texture2D(asciiArtFont, vec2(offsetx + x, offsety + (caracterSize / fonty - y)));
- finalColor.rgb *= tileColor.rgb;
- finalColor.a = 1.0;
- finalColor = mix(finalColor, tileColor, asciiArtOptions.w);
- finalColor = mix(finalColor, baseColor, asciiArtOptions.z);
- gl_FragColor = finalColor;
- }
|