26 lines
No EOL
932 B
Text
26 lines
No EOL
932 B
Text
shader_type canvas_item;
|
|
|
|
uniform vec4 outline_color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
|
|
uniform float outline_width : hint_range(0.0, 10.0) = 1.0;
|
|
uniform float outline_alpha : hint_range(0.0, 1.0) = 1.0;
|
|
|
|
void fragment() {
|
|
vec2 size = TEXTURE_PIXEL_SIZE * outline_width;
|
|
vec4 sprite_color = texture(TEXTURE, UV);
|
|
float outline = 0.0;
|
|
|
|
// Left
|
|
outline += texture(TEXTURE, UV + vec2(-size.x, 0)).a;
|
|
// Right
|
|
outline += texture(TEXTURE, UV + vec2(size.x, 0)).a;
|
|
// Top
|
|
outline += texture(TEXTURE, UV + vec2(0, -size.y)).a;
|
|
// Top-left
|
|
outline += texture(TEXTURE, UV + vec2(-size.x, -size.y)).a;
|
|
// Top-right
|
|
outline += texture(TEXTURE, UV + vec2(size.x, -size.y)).a;
|
|
|
|
outline = min(outline, 1.0);
|
|
vec4 final_color = mix(outline_color, sprite_color, sprite_color.a);
|
|
COLOR = vec4(final_color.rgb, max(sprite_color.a, outline * outline_color.a * outline_alpha));
|
|
} |