mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-18 13:55:23 -05:00
e794bc11b9
OpenGL only supports shared alpha blending. Subpixel font rendering requires using the font RGB values as alpha masks for the corresponding RGB channels. To support this, blending is implemented in the fragment shader.
30 lines
837 B
GLSL
30 lines
837 B
GLSL
#version 330 core
|
|
in vec2 TexCoords;
|
|
|
|
uniform sampler2D mask;
|
|
uniform vec3 textColor;
|
|
uniform vec3 bgColor;
|
|
|
|
// SRC = SRC_ALPHA; DST = 1 - SRC_ALPHA
|
|
void MyBlend(in vec3 srcValue,
|
|
in vec3 dstValue,
|
|
in vec3 srcAlpha,
|
|
out vec3 blended)
|
|
{
|
|
vec3 dstAlpha = vec3(1.0, 1.0, 1.0) - srcAlpha;
|
|
vec3 preBlended = (srcValue * srcAlpha + dstValue * dstAlpha);
|
|
|
|
blended = vec3(min(1.0, preBlended.x),
|
|
min(1.0, preBlended.y),
|
|
min(1.0, preBlended.z));
|
|
}
|
|
|
|
void main()
|
|
{
|
|
// vec4 red = vec4(sampled.rgb, sampled.r * sampled.g * sampled.b);
|
|
// vec4 sampled = vec4(1.0, 1.0, 1.0, texture(mask, TexCoords));
|
|
vec3 blended = vec3(1.0, 1.0, 1.0);
|
|
MyBlend(textColor, bgColor, texture(mask, TexCoords).rgb, blended);
|
|
|
|
gl_FragColor = vec4(blended, 1.0);
|
|
}
|