[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
	));
}
"