Create-Engine/src/assets/shaders/outline.frag
2025-05-05 22:28:17 -05:00

44 lines
1.1 KiB
GLSL

#version 330 core
in vec2 TexCoords;
out vec4 FragColor;
uniform sampler2D uTexture;
uniform vec4 outlineColor = vec4(1.0, 1.0, 0.0, 1.0); // Yellow outline
uniform float threshold = 0.1; // Alpha threshold
uniform float outlineWidth = 1.0 / 256.0; // Adjust based on resolution
void main()
{
float alpha = texture(uTexture, TexCoords).a;
// If we're fully inside the texture, draw normally
if (alpha > threshold)
{
FragColor = texture(uTexture, TexCoords);
return;
}
// Sample neighbors to detect edges
bool isEdge = false;
for (int x = -1; x <= 1; ++x)
{
for (int y = -1; y <= 1; ++y)
{
if (x == 0 && y == 0) continue;
vec2 offset = vec2(x, y) * outlineWidth;
float neighborAlpha = texture(uTexture, TexCoords + offset).a;
if (neighborAlpha > threshold)
{
isEdge = true;
break;
}
}
if (isEdge) break;
}
if (isEdge)
FragColor = outlineColor;
else
discard;
}