changed BaseWindingForPlane to construct the polygon using
authorForest Hale <lordhavoc>
Fri, 9 Mar 2007 01:57:32 +0000 (01:57 +0000)
committerForest Hale <lordhavoc>
Fri, 9 Mar 2007 01:57:32 +0000 (01:57 +0000)
MAX_WORLD_COORD*2 as radius rather than MAX_WORLD_COORD, this fixes
problems with certain invalid brushes not being rejected because of
insufficiently large coords, usually causing a stack overflow when
constructing the BSP tree (due to insufficient "_blocksize")

git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@156 8a3a26a2-13c4-0310-b231-cf6edde360e5

tools/quake3/common/polylib.c

index 5582429..21067ca 100644 (file)
@@ -249,8 +249,11 @@ winding_t *BaseWindingForPlane (vec3_t normal, vec_t dist)
        
        CrossProduct (vup, normal, vright);
        
-       VectorScale (vup, MAX_WORLD_COORD, vup);
-       VectorScale (vright, MAX_WORLD_COORD, vright);
+       // LordHavoc: this has to use *2 because otherwise some created points may
+       // be inside the world (think of a diagonal case), and any brush with such
+       // points should be removed, failure to detect such cases is disasterous
+       VectorScale (vup, MAX_WORLD_COORD*2, vup);
+       VectorScale (vright, MAX_WORLD_COORD*2, vright);
 
   // project a really big      axis aligned box onto the plane
        w = AllocWinding (4);