diff options
Diffstat (limited to 'alacritty/res/glsl3/text.f.glsl')
-rw-r--r-- | alacritty/res/glsl3/text.f.glsl | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/alacritty/res/glsl3/text.f.glsl b/alacritty/res/glsl3/text.f.glsl new file mode 100644 index 00000000..eddc1734 --- /dev/null +++ b/alacritty/res/glsl3/text.f.glsl @@ -0,0 +1,40 @@ +in vec2 TexCoords; +flat in vec4 fg; +flat in vec4 bg; +uniform int backgroundPass; + +layout(location = 0, index = 0) out vec4 color; +layout(location = 0, index = 1) out vec4 alphaMask; + +uniform sampler2D mask; + +#define COLORED 2 + +void main() { + if (backgroundPass != 0) { + if (bg.a == 0.0) { + discard; + } + + alphaMask = vec4(1.0); + + // Premultiply background color by alpha. + color = vec4(bg.rgb * bg.a, bg.a); + } else if ((int(fg.a) & COLORED) != 0) { + // Color glyphs, like emojis. + vec4 glyphColor = texture(mask, TexCoords); + alphaMask = vec4(glyphColor.a); + + // Revert alpha premultiplication. + if (glyphColor.a != 0) { + glyphColor.rgb = vec3(glyphColor.rgb / glyphColor.a); + } + + color = vec4(glyphColor.rgb, 1.0); + } else { + // Regular text glyphs. + vec3 textColor = texture(mask, TexCoords).rgb; + alphaMask = vec4(textColor, textColor.r); + color = vec4(fg.rgb, 1.0); + } +} |