Skip to content

Instantly share code, notes, and snippets.

@partybusiness
Created February 18, 2025 02:35
Show Gist options
  • Save partybusiness/de3c1828d2f21bc6d5eb79b9231985be to your computer and use it in GitHub Desktop.
Save partybusiness/de3c1828d2f21bc6d5eb79b9231985be to your computer and use it in GitHub Desktop.
shader_type canvas_item;
// draws black dots at corners
uniform float dot_size = 30; // size of dots at vertices
varying vec2 vertex_uv; // used to pass fake UV since real UV wasn't behaving as expected
void vertex() {
vertex_uv = COLOR.rg; // using vertex colour because UV array from Polygon2D wasn't working for me?
//vertex_uv = UV;
}
float distance_from_corner(vec2 iuv, vec2 deltaX, vec2 deltaY) {
float a = (iuv.y * deltaY.x - iuv.x * deltaY.y) / (deltaX.y * deltaY.x - deltaX.x * deltaY.y);
float b = (iuv.x * deltaX.y - iuv.y * deltaX.x) / (deltaX.y * deltaY.x - deltaX.x * deltaY.y);
return length(vec2(a,b));
}
void fragment() {
vec2 deltaX = dFdx(vertex_uv);
vec2 deltaY = dFdy(vertex_uv);
float corner00 = distance_from_corner(vertex_uv - vec2(0.0, 0.01), deltaX, deltaY);
float corner01 = distance_from_corner(vertex_uv - vec2(0.0, 1.0), deltaX, deltaY);
float corner11 = distance_from_corner(vertex_uv - vec2(1.0, 1.0), deltaX, deltaY);
float corner10 = distance_from_corner(vertex_uv - vec2(1.0, 0.0), deltaX, deltaY);
float min_dist = min(min(corner00, corner01), min(corner10, corner11));
COLOR.rgb = vec3(min_dist > dot_size ? 1.0 : 0.0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment