]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake3/common/polylib.h
try to fix the "-np surfaces disappear" bug
[xonotic/netradiant.git] / tools / quake3 / common / polylib.h
index d78c780d68781d2848111be2a02d58627cea98b4..9750180ed325c51d52710e7032084c36c546a24f 100644 (file)
@@ -38,6 +38,8 @@ vec_t WindingArea (winding_t *w);
 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);
@@ -55,3 +57,20 @@ void ChopWindingInPlace (winding_t **w, vec3_t normal, vec_t dist, vec_t epsilon
 // 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);