]> 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 e58875a2266594d1ce96bad062d069dc0d9cc5bb..9750180ed325c51d52710e7032084c36c546a24f 100644 (file)
@@ -26,7 +26,7 @@ typedef struct
        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
@@ -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);