GOOENGINE: Fix sdf double include error

Versions off the safe_sqrt for the sdf utils because I am tired of trying to get them all to work properly
This commit is contained in:
2025-12-01 22:54:25 -06:00
parent 3dc6c87740
commit 8604d2f2d7
2 changed files with 33 additions and 33 deletions
@@ -118,7 +118,7 @@ float sdf_2d_isosceles(vec2 p, vec2 q)
vec2 b = p - q * vec2(clamp(p.x / q.x, 0.0, 1.0), 1.0); vec2 b = p - q * vec2(clamp(p.x / q.x, 0.0, 1.0), 1.0);
float s = -sign(q.y); float s = -sign(q.y);
vec2 d = min(vec2(dot(a, a), s * (p.x * q.y - p.y * q.x)), vec2(dot(b, b), s * (p.y - q.y))); vec2 d = min(vec2(dot(a, a), s * (p.x * q.y - p.y * q.x)), vec2(dot(b, b), s * (p.y - q.y)));
return -safe_sqrt(d.x) * sign(d.y); return -sdf_safe_sqrt(d.x) * sign(d.y);
} }
float sdf_2d_hexagon(vec2 p, float r) float sdf_2d_hexagon(vec2 p, float r)
@@ -153,7 +153,7 @@ float sdf_2d_trapezoid(vec2 p, float w2, float h, float w1)
vec2 ca = vec2(p.x - min(p.x, (p.y < 0.0) ? r1 : r2), abs(p.y) - he); vec2 ca = vec2(p.x - min(p.x, (p.y < 0.0) ? r1 : r2), abs(p.y) - he);
vec2 cb = p - k1 + k2 * clamp(dot(k1 - p, k2) / dot2(k2), 0.0, 1.0); vec2 cb = p - k1 + k2 * clamp(dot(k1 - p, k2) / dot2(k2), 0.0, 1.0);
float s = ((cb.x < 0.0) && (ca.y < 0.0)) ? -1.0 : 1.0; float s = ((cb.x < 0.0) && (ca.y < 0.0)) ? -1.0 : 1.0;
return s * safe_sqrt(min(dot2(ca), dot2(cb))); return s * sdf_safe_sqrt(min(dot2(ca), dot2(cb)));
} }
float sdf_2d_rounded_x(vec2 p, float w) float sdf_2d_rounded_x(vec2 p, float w)
@@ -176,11 +176,11 @@ float sdf_2d_blobby_cross(vec2 pos, float he)
float x; float x;
if (h > 0.0) { if (h > 0.0) {
float r = safe_sqrt(h); float r = sdf_safe_sqrt(h);
x = pow(q + r, 1.0 / 3.0) - pow(abs(q - r), 1.0 / 3.0) * sign(r - q); x = pow(q + r, 1.0 / 3.0) - pow(abs(q - r), 1.0 / 3.0) * sign(r - q);
} }
else { else {
float r = safe_sqrt(p); float r = sdf_safe_sqrt(p);
x = 2.0 * r * cos(acos(safe_divide(q, (p * r))) / 3.0); x = 2.0 * r * cos(acos(safe_divide(q, (p * r))) / 3.0);
} }
x = min(x, M_SQRT2 / 2.0); x = min(x, M_SQRT2 / 2.0);
@@ -199,17 +199,17 @@ float sdf_2d_uneven_capsule(vec2 p, vec2 pa, vec2 pb, float ra, float rb)
q.x = abs(q.x); q.x = abs(q.x);
float b = ra - rb; float b = ra - rb;
vec2 c = vec2(safe_sqrt(h - b * b), b); vec2 c = vec2(sdf_safe_sqrt(h - b * b), b);
float k = cross2(c, q); float k = cross2(c, q);
float m = dot(c, q); float m = dot(c, q);
float n = dot(q, q); float n = dot(q, q);
if (k < 0.0) { if (k < 0.0) {
return safe_sqrt(h * (n)) - ra; return sdf_safe_sqrt(h * (n)) - ra;
} }
else if (k > c.x) { else if (k > c.x) {
return safe_sqrt(h * (n + 1.0 - 2.0 * q.y)) - rb; return sdf_safe_sqrt(h * (n + 1.0 - 2.0 * q.y)) - rb;
} }
return m - ra; return m - ra;
} }
@@ -225,10 +225,10 @@ float sdf_2d_parabola(vec2 pos, float k)
float q = -abs(pos.x) / (4.0 * k * k); float q = -abs(pos.x) / (4.0 * k * k);
float h = q * q + p * p * p; float h = q * q + p * p * p;
float r = safe_sqrt(abs(h)); float r = sdf_safe_sqrt(abs(h));
float x = (h > 0.0) ? pow(-q + r, 1.0 / 3.0) - pow(abs(-q - r), 1.0 / 3.0) * sgn(q + r) : float x = (h > 0.0) ? pow(-q + r, 1.0 / 3.0) - pow(abs(-q - r), 1.0 / 3.0) * sgn(q + r) :
2.0 * cos(atan(r, -q) / 3.0) * safe_sqrt(-p); 2.0 * cos(atan(r, -q) / 3.0) * sdf_safe_sqrt(-p);
d = length(pos - vec2(x, k * x * x)) * sgn(pos.x - x); d = length(pos - vec2(x, k * x * x)) * sgn(pos.x - x);
} }
@@ -249,12 +249,12 @@ float sdf_2d_parabola_segment(vec2 pos, float wi, float he)
float x; float x;
if (h > 0.0) // 1 root if (h > 0.0) // 1 root
{ {
float r = safe_sqrt(h); float r = sdf_safe_sqrt(h);
x = pow(q + r, 1.0 / 3.0) - pow(abs(q - r), 1.0 / 3.0) * sign(r - q); x = pow(q + r, 1.0 / 3.0) - pow(abs(q - r), 1.0 / 3.0) * sign(r - q);
} }
else // 3 roots else // 3 roots
{ {
float r = safe_sqrt(p); float r = sdf_safe_sqrt(p);
x = 2.0 * r * cos(acos(q / (p * r)) / 3.0); x = 2.0 * r * cos(acos(q / (p * r)) / 3.0);
} }
@@ -281,21 +281,21 @@ float sdf_2d_bezier(vec2 pos, vec2 A, vec2 C, vec2 B)
float q = kx * (2.0 * kx * kx - 3.0 * ky) + kz; float q = kx * (2.0 * kx * kx - 3.0 * ky) + kz;
float h = q * q + 4.0 * p3; float h = q * q + 4.0 * p3;
if (h >= 0.0) { if (h >= 0.0) {
h = safe_sqrt(h); h = sdf_safe_sqrt(h);
vec2 x = (vec2(h, -h) - q) / 2.0; vec2 x = (vec2(h, -h) - q) / 2.0;
vec2 uv = sign(x) * pow(abs(x), vec2(1.0 / 3.0)); vec2 uv = sign(x) * pow(abs(x), vec2(1.0 / 3.0));
float t = clamp(uv.x + uv.y - kx, 0.0, 1.0); float t = clamp(uv.x + uv.y - kx, 0.0, 1.0);
res = dot2(d + (c + b * t) * t); res = dot2(d + (c + b * t) * t);
} }
else { else {
float z = safe_sqrt(-p); float z = sdf_safe_sqrt(-p);
float v = acos(q / (p * z * 2.0)) / 3.0; float v = acos(q / (p * z * 2.0)) / 3.0;
float m = cos(v); float m = cos(v);
float n = sin(v) * M_SQRT3; float n = sin(v) * M_SQRT3;
vec3 t = clamp(vec3(m + m, -n - m, n - m) * z - kx, 0.0, 1.0); vec3 t = clamp(vec3(m + m, -n - m, n - m) * z - kx, 0.0, 1.0);
res = min(dot2(d + (c + b * t.x) * t.x), dot2(d + (c + b * t.y) * t.y)); res = min(dot2(d + (c + b * t.x) * t.x), dot2(d + (c + b * t.y) * t.y));
} }
return safe_sqrt(res); return sdf_safe_sqrt(res);
} }
float sdf_2d_ellipse(vec2 p, vec2 ab) float sdf_2d_ellipse(vec2 p, vec2 ab)
@@ -327,20 +327,20 @@ float sdf_2d_ellipse(vec2 p, vec2 ab)
float h = acos(q / c3) / 3.0; float h = acos(q / c3) / 3.0;
float s = cos(h); float s = cos(h);
float t = sin(h) * M_SQRT3; float t = sin(h) * M_SQRT3;
float rx = safe_sqrt(-c * (s + t + 2.0) + m2); float rx = sdf_safe_sqrt(-c * (s + t + 2.0) + m2);
float ry = safe_sqrt(-c * (s - t + 2.0) + m2); float ry = sdf_safe_sqrt(-c * (s - t + 2.0) + m2);
co = (ry + sign(l) * rx + abs(g) / (rx * ry) - m) / 2.0; co = (ry + sign(l) * rx + abs(g) / (rx * ry) - m) / 2.0;
} }
else { else {
float h = 2.0 * m * n * safe_sqrt(d); float h = 2.0 * m * n * sdf_safe_sqrt(d);
float s = sign(q + h) * pow(abs(q + h), 1.0 / 3.0); float s = sign(q + h) * pow(abs(q + h), 1.0 / 3.0);
float u = sign(q - h) * pow(abs(q - h), 1.0 / 3.0); float u = sign(q - h) * pow(abs(q - h), 1.0 / 3.0);
float rx = -s - u - c * 4.0 + 2.0 * m2; float rx = -s - u - c * 4.0 + 2.0 * m2;
float ry = (s - u) * M_SQRT3; float ry = (s - u) * M_SQRT3;
float rm = safe_sqrt(rx * rx + ry * ry); float rm = sdf_safe_sqrt(rx * rx + ry * ry);
co = (ry / safe_sqrt(rm - rx) + 2.0 * g / rm - m) / 2.0; co = (ry / sdf_safe_sqrt(rm - rx) + 2.0 * g / rm - m) / 2.0;
} }
vec2 r = ab * vec2(co, safe_sqrt(1.0 - co * co)); vec2 r = ab * vec2(co, sdf_safe_sqrt(1.0 - co * co));
return length(r - p) * sign(p.y - r.y); return length(r - p) * sign(p.y - r.y);
} }
@@ -352,10 +352,10 @@ float sdf_2d_heart(vec2 p, float r)
p.x = abs(p.x); p.x = abs(p.x);
if (p.y + p.x > r) { if (p.y + p.x > r) {
return safe_sqrt(dot2(p - vec2(0.25, 0.75) * r)) - M_SQRT2 / 4.0 * r; return sdf_safe_sqrt(dot2(p - vec2(0.25, 0.75) * r)) - M_SQRT2 / 4.0 * r;
} }
else { else {
return safe_sqrt(min(dot2(p - vec2(0.0, 1.0) * r), dot2(p - 0.5 * max(p.x + p.y, 0.0)))) * return sdf_safe_sqrt(min(dot2(p - vec2(0.0, 1.0) * r), dot2(p - 0.5 * max(p.x + p.y, 0.0)))) *
sign(p.x - p.y); sign(p.x - p.y);
} }
} }
@@ -381,7 +381,7 @@ float sdf_2d_quad(vec2 p, vec2 p0, vec2 p1, vec2 p2, vec2 p3)
min(vec2(dot(pq2, pq2), v2.x * e2.y - v2.y * e2.x), min(vec2(dot(pq2, pq2), v2.x * e2.y - v2.y * e2.x),
vec2(dot(pq3, pq3), v3.x * e3.y - v3.y * e3.x))); vec2(dot(pq3, pq3), v3.x * e3.y - v3.y * e3.x)));
float d = safe_sqrt(ds.x); float d = sdf_safe_sqrt(ds.x);
return (ds.y > 0.0) ? -d : d; return (ds.y > 0.0) ? -d : d;
} }
@@ -390,7 +390,7 @@ float sdf_2d_vesica(vec2 p, float r, float d)
{ {
p = abs(p); p = abs(p);
float b = safe_sqrt(r * r - d * d); float b = sdf_safe_sqrt(r * r - d * d);
if ((p.y - b) * d > p.x * b) { if ((p.y - b) * d > p.x * b) {
return length(vec2(p.x, p.y - b)) * sign(d); return length(vec2(p.x, p.y - b)) * sign(d);
} }
@@ -404,7 +404,7 @@ float sdf_2d_moon(vec2 p, float d, float ra, float rb)
p.y = abs(p.y); p.y = abs(p.y);
float a = (ra * ra - rb * rb + d * d) / (2.0 * d); float a = (ra * ra - rb * rb + d * d) / (2.0 * d);
float b = safe_sqrt(ra * ra - a * a); float b = sdf_safe_sqrt(ra * ra - a * a);
float m = d * (p.x * b - p.y * a); float m = d * (p.x * b - p.y * a);
float n = d * d * max(b - p.y, 0.0); float n = d * d * max(b - p.y, 0.0);
if (m > n) { if (m > n) {
@@ -469,7 +469,7 @@ float sdf_2d_arc(vec2 p, float a, float ra)
vec2 sc = sincos(clamp(a * 0.5, 0.0, M_PI)); vec2 sc = sincos(clamp(a * 0.5, 0.0, M_PI));
p.x = abs(p.x); p.x = abs(p.x);
float k = (sc.y * p.x > sc.x * p.y) ? dot(p.xy, sc) : length(p.xy); float k = (sc.y * p.x > sc.x * p.y) ? dot(p.xy, sc) : length(p.xy);
return safe_sqrt(dot(p, p) + ra * ra - 2.0 * ra * k); return sdf_safe_sqrt(dot(p, p) + ra * ra - 2.0 * ra * k);
} }
float sdf_2d_horseshoe(vec2 p, float r, float a, float overshoot, float lw) float sdf_2d_horseshoe(vec2 p, float r, float a, float overshoot, float lw)
@@ -500,7 +500,7 @@ float sdf_2d_point_triangle(vec2 p, vec2 p0, vec2 p1, vec2 p2)
vec2 d = min(min(vec2(dot(pq0, pq0), s * (v0.x * e0.y - v0.y * e0.x)), vec2 d = min(min(vec2(dot(pq0, pq0), s * (v0.x * e0.y - v0.y * e0.x)),
vec2(dot(pq1, pq1), s * (v1.x * e1.y - v1.y * e1.x))), vec2(dot(pq1, pq1), s * (v1.x * e1.y - v1.y * e1.x))),
vec2(dot(pq2, pq2), s * (v2.x * e2.y - v2.y * e2.x))); vec2(dot(pq2, pq2), s * (v2.x * e2.y - v2.y * e2.x)));
return -safe_sqrt(d.x) * sgn(d.y); return -sdf_safe_sqrt(d.x) * sgn(d.y);
} }
float sdf_2d_star_x(vec2 p, float r, float sides, float inset) float sdf_2d_star_x(vec2 p, float r, float sides, float inset)
@@ -680,7 +680,7 @@ float sdf_3d_point_cone(vec3 p, vec3 a, vec3 b, float ra, float rb)
float papa = dot(p - a, p - a); float papa = dot(p - a, p - a);
float paba = safe_divide(dot(p - a, b - a), baba); float paba = safe_divide(dot(p - a, b - a), baba);
float x = safe_sqrt(papa - paba * paba * baba); float x = sdf_safe_sqrt(papa - paba * paba * baba);
float cax = max(0.0, x - ((paba < 0.5) ? ra : rb)); float cax = max(0.0, x - ((paba < 0.5) ? ra : rb));
float cay = abs(paba - 0.5) - 0.5; float cay = abs(paba - 0.5) - 0.5;
@@ -693,7 +693,7 @@ float sdf_3d_point_cone(vec3 p, vec3 a, vec3 b, float ra, float rb)
float s = (cbx < 0.0 && cay < 0.0) ? -1.0 : 1.0; float s = (cbx < 0.0 && cay < 0.0) ? -1.0 : 1.0;
return s * safe_sqrt(min(cax * cax + cay * cay * baba, cbx * cbx + cby * cby * baba)); return s * sdf_safe_sqrt(min(cax * cax + cay * cay * baba, cbx * cbx + cby * cby * baba));
} }
float sdf_3d_capsule(vec3 p, vec3 a, vec3 b, float r) float sdf_3d_capsule(vec3 p, vec3 a, vec3 b, float r)
@@ -726,7 +726,7 @@ float sdf_3d_cylinder(vec3 p, vec3 a, vec3 b, float r)
float x2 = x * x; float x2 = x * x;
float y2 = y * y * baba; float y2 = y * y * baba;
float d = (max(x, y) < 0.0) ? -min(x2, y2) : (((x > 0.0) ? x2 : 0.0) + ((y > 0.0) ? y2 : 0.0)); float d = (max(x, y) < 0.0) ? -min(x2, y2) : (((x > 0.0) ? x2 : 0.0) + ((y > 0.0) ? y2 : 0.0));
return sign(d) * safe_sqrt(abs(d)) / baba; return sign(d) * sdf_safe_sqrt(abs(d)) / baba;
} }
float sdf_3d_solid_angle(vec3 p, float a, float ra) float sdf_3d_solid_angle(vec3 p, float a, float ra)
@@ -764,7 +764,7 @@ float sdf_3d_pyramid(vec3 p, float w, float h)
float d2 = min(q.y, -q.x * m2 - q.y * 0.5) > 0.0 ? 0.0 : min(a, b); float d2 = min(q.y, -q.x * m2 - q.y * 0.5) > 0.0 ? 0.0 : min(a, b);
/* recover 3D and scale, and add sign */ /* recover 3D and scale, and add sign */
float d = safe_sqrt((d2 + q.z * q.z) / m2) * sign(max(q.z, -p.y)); float d = sdf_safe_sqrt((d2 + q.z * q.z) / m2) * sign(max(q.z, -p.y));
return d * w; return d * w;
} }
@@ -2124,7 +2124,7 @@ float sdCrescent(vec2 p, float d, float r0, float r1)
if (a < r0) { if (a < r0) {
p.y = abs(p.y); p.y = abs(p.y);
float b = safe_sqrt(r0 * r0 - a * a); float b = sdf_safe_sqrt(r0 * r0 - a * a);
float k = p.y * a - p.x * b; float k = p.y * a - p.x * b;
float h = min(sign0 * (d * (p.y - b) - k), sign1 * k); float h = min(sign0 * (d * (p.y - b) - k), sign1 * k);
if (h > 0.0) { if (h > 0.0) {
@@ -23,7 +23,7 @@
* Safe square root function. Returns `sqrt(a)`. * Safe square root function. Returns `sqrt(a)`.
* If `a` is less or equal to 0 then the result will be 0. * If `a` is less or equal to 0 then the result will be 0.
*/ */
float safe_sqrt(float a) float sdf_safe_sqrt(float a)
{ {
return sqrt(max(0.0, a)); return sqrt(max(0.0, a));
} }