vec3_t p[4]; // variable sized
} winding_t;
-#define MAX_POINTS_ON_WINDING 64
+#define MAX_POINTS_ON_WINDING 512
// you can define on_epsilon in the makefile as tighter
#ifndef ON_EPSILON
void WindingCenter (winding_t *w, vec3_t center);
void ClipWindingEpsilon (winding_t *in, vec3_t normal, vec_t dist,
vec_t epsilon, winding_t **front, winding_t **back);
+void ClipWindingEpsilonStrict (winding_t *in, vec3_t normal, vec_t dist,
+ vec_t epsilon, winding_t **front, winding_t **back);
winding_t *ChopWinding (winding_t *in, vec3_t normal, vec_t dist);
winding_t *CopyWinding (winding_t *w);
winding_t *ReverseWinding (winding_t *w);
// frees the original if clipped
void pw(winding_t *w);
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+// Below is double-precision stuff. This was initially needed by the base winding code
+// in q3map2 brush processing.
+///////////////////////////////////////////////////////////////////////////////////////
+
+typedef struct
+{
+ int numpoints;
+ vec3_accu_t p[4]; // variable sized
+} winding_accu_t;
+
+winding_accu_t *BaseWindingForPlaneAccu(vec3_t normal, vec_t dist);
+void ChopWindingInPlaceAccu(winding_accu_t **w, vec3_t normal, vec_t dist, vec_t epsilon);
+winding_t *CopyWindingAccuToRegular(winding_accu_t *w);
+void FreeWindingAccu(winding_accu_t *w);