35 lines
1.1 KiB
GLSL
35 lines
1.1 KiB
GLSL
shader_type canvas_item;
|
|
|
|
uniform sampler2D palette : hint_albedo;
|
|
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() {
|
|
vec4 color = texture(TEXTURE, UV);
|
|
|
|
// fucked up lighting change to make blood work perfectly
|
|
if (AT_LIGHT_PASS) {
|
|
COLOR = vec4(1.0, 1.0, 1.0, color.a);
|
|
} else if (color.a == 0.0 && is_border(TEXTURE, UV, TEXTURE_PIXEL_SIZE)) {
|
|
COLOR = border_color;
|
|
} else {
|
|
COLOR = texture(palette, color.rg );
|
|
COLOR.a = color.a;
|
|
}
|
|
}
|