#version 450

layout(location = 1) in vec2 texCoord;

layout(location = 0) out vec4 outColor;

layout(set = 2, binding = 0) uniform sampler2D texSampler;

layout(set = 3, binding = 0) uniform TextConfig
{
    vec4 textColor;
    vec4 borderColor;
    vec4 backgroundColor;
    float threshold;
	float borderSize;
	float smoothing;
	bool applyBorder;
} textConfig;

void main()
{
    float distance = texture(texSampler, texCoord).r;
    float alpha = smoothstep(textConfig.threshold - textConfig.smoothing, textConfig.threshold + textConfig.smoothing, distance);
    if (textConfig.applyBorder)
    {
        float border = smoothstep(textConfig.threshold + textConfig.borderSize - textConfig.smoothing, 
                                  textConfig.threshold + textConfig.borderSize + textConfig.smoothing, distance);
        outColor = mix(textConfig.borderColor, textConfig.textColor, border) * alpha;
    }
    else
    {
        outColor = vec4(textConfig.textColor) * alpha; 
    }

    if (textConfig.backgroundColor.a != 0)
    {
        outColor = mix(textConfig.backgroundColor, outColor, alpha);
    }
}
