shader_type canvas_item;
void fragment() {
// rect boundaries
vec2 rectMin = vec2(0.4, 0.2);
vec2 rectMax = vec2(0.8, 0.8);
vec2 center = (rectMin + rectMax) / 2.0;
vec2 halfSize = center - rectMin;
vec2 fw = fwidth(UV);
vec2 dist = abs(UV - center);
float col = 0.0;
if (all(lessThan(dist, halfSize)) && any(greaterThan(dist, halfSize - fw))) {
// for pixel here I could use fragCoord.xy, but on textures you don't have it
// using fwidth is a tricky way to operate in screenspace sizes on all surfaces
// of course it's an approximation, but it's a pretty good one, here, uncomment this
// line to try fragCoord, it gives almost the same result:
//vec2 pixel = fragCoord.xy;
vec2 pixel = UV / fw;
float aspect = halfSize.y / halfSize.x;
float dir = (dist.x * aspect > dist.y) ?
-sign(UV.x - center.x) : sign(UV.y - center.y);
float dash = step(0.5, fract((pixel.x + pixel.y) * dir / 10.0 + TIME));
col = mix(1.0, 0.0, dash);
}
COLOR = vec4(col, col, col, 1.0);
}