shader_type canvas_item; uniform vec4 border_color : hint_color = vec4(0.0, 0.0, 0.0, 1.0); uniform bool border_corners = false; bool is_border(sampler2D tex, vec2 uv, vec2 pixel_size) { float check = texture(tex, uv + vec2(pixel_size.x, 0.0)).a; check += texture(tex, uv + vec2(-pixel_size.x, 0.0)).a; check += texture(tex, uv + vec2(0.0, pixel_size.y)).a; check += texture(tex, uv + vec2(0.0, -pixel_size.y)).a; if (border_corners) { check += texture(tex, uv + pixel_size).a; check += texture(tex, uv - pixel_size).a; check += texture(tex, uv + vec2(pixel_size.x, -pixel_size.y)).a; check += texture(tex, uv + vec2(-pixel_size.x, pixel_size.y)).a; } return check > 0.0; } void fragment() { COLOR = texture(TEXTURE, UV); if (COLOR.a == 0.0 && is_border(TEXTURE, UV, TEXTURE_PIXEL_SIZE)) { COLOR = border_color; } }