shader_type canvas_item; uniform bool outline_enabled = false; uniform vec3 outline_color : source_color = vec3(1.0); void fragment() { COLOR = texture(TEXTURE, UV); if (outline_enabled) { float border = texture(TEXTURE, UV + vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a; border += texture(TEXTURE, UV - vec2(TEXTURE_PIXEL_SIZE.x, 0.0)).a; border += texture(TEXTURE, UV + vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a; border += texture(TEXTURE, UV - vec2(0.0, TEXTURE_PIXEL_SIZE.y)).a; float final = step(sign(border), sign(COLOR.a)); COLOR = vec4(vec3(mix(outline_color, COLOR.rgb, final)), step(final, COLOR.a)); } }