39 lines
725 B
Plaintext
39 lines
725 B
Plaintext
![]() |
[gd_resource type="Shader" format=3 uid="uid://c84r6o3a8gfo0"]
|
||
|
|
||
|
[resource]
|
||
|
code = "shader_type canvas_item;
|
||
|
render_mode blend_premul_alpha;
|
||
|
|
||
|
uniform vec4 color;
|
||
|
uniform vec2 origin;
|
||
|
uniform vec2 delta;
|
||
|
uniform float width;
|
||
|
uniform bool enable_aa;
|
||
|
|
||
|
|
||
|
float get_sdf(vec2 pos) {
|
||
|
if (delta == vec2(0.0)) return float(-1.0);
|
||
|
|
||
|
float h = clamp(dot(pos, delta) / dot(delta, delta), 0.0, 1.0);
|
||
|
return length(pos - h * delta);
|
||
|
}
|
||
|
|
||
|
|
||
|
vec4 sdf_to_color(float sdf) {
|
||
|
if (enable_aa)
|
||
|
return vec4(color.rgb, mix(
|
||
|
0.0,
|
||
|
color.a,
|
||
|
(width * 0.5 - sdf) * 2.0
|
||
|
));
|
||
|
else
|
||
|
return vec4(color.rgb, 1.0 - floor(sdf / (width * 0.5)));
|
||
|
}
|
||
|
|
||
|
void fragment() {
|
||
|
COLOR = sdf_to_color(get_sdf(
|
||
|
floor(UV / TEXTURE_PIXEL_SIZE) - origin
|
||
|
));
|
||
|
}
|
||
|
"
|