if (c_active_windings > c_peak_windings)
c_peak_windings = c_active_windings;
}
- s = sizeof(vec_t)*3*points + sizeof(int);
+ s = sizeof(*w) + (points ? sizeof(w->p[0])*(points-1) : 0);
w = safe_malloc (s);
memset (w, 0, s);
return w;
if (c_active_windings > c_peak_windings)
c_peak_windings = c_active_windings;
}
- s = sizeof(vec_accu_t) * 3 * points + sizeof(int);
+ s = sizeof(*w) + (points ? sizeof(w->p[0])*(points-1) : 0);
w = safe_malloc(s);
memset(w, 0, s);
return w;
ClipWindingEpsilon
=============
*/
-void ClipWindingEpsilon (winding_t *in, vec3_t normal, vec_t dist,
+void ClipWindingEpsilonStrict (winding_t *in, vec3_t normal, vec_t dist,
vec_t epsilon, winding_t **front, winding_t **back)
{
vec_t dists[MAX_POINTS_ON_WINDING+4];
*front = *back = NULL;
+ if (!counts[0] && !counts[1])
+ {
+ return;
+ }
if (!counts[0])
{
*back = CopyWinding (in);
Error ("ClipWinding: MAX_POINTS_ON_WINDING");
}
+void ClipWindingEpsilon (winding_t *in, vec3_t normal, vec_t dist,
+ vec_t epsilon, winding_t **front, winding_t **back)
+{
+ ClipWindingEpsilonStrict(in, normal, dist, epsilon, front, back);
+ /* apparently most code expects that in the winding-on-plane case, the back winding is the original winding */
+ if(!*front && !*back)
+ *back = CopyWinding(in);
+}
+
/*
=============