#version 450 layout(location = 0) in vec2 texCoord; layout(location = 0) out vec4 outColor; layout(set = 2, binding = 0) uniform sampler2D texSampler; layout(set = 3, binding = 0) uniform TextConfig { vec3 textColor; vec3 borderColor; int outputSize; 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 = vec4(mix(textConfig.borderColor, textConfig.textColor, border), 1) * alpha; } else { outColor = vec4(textConfig.textColor, 1) * alpha; } }