]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake3/q3map2/tjunction.c
more warning fixes
[xonotic/netradiant.git] / tools / quake3 / q3map2 / tjunction.c
index 96210d4d2b1ad75243627b15ad14d115fd54fc54..1ecd1ac3d04a9557d0ae3269ecf82e20410e2ce8 100644 (file)
@@ -330,23 +330,18 @@ void FixSurfaceJunctions( mapDrawSurface_t *ds ) {
        int                     i, j, k;
        edgeLine_t      *e;
        edgePoint_t     *p;
-       int                     originalVerts;
        int                     counts[MAX_SURFACE_VERTS];
        int                     originals[MAX_SURFACE_VERTS];
-       int                     firstVert[MAX_SURFACE_VERTS];
        bspDrawVert_t   verts[MAX_SURFACE_VERTS], *v1, *v2;
        int                     numVerts;
        float           start, end, frac, c;
        vec3_t          delta;
        
        
-       originalVerts = ds->numVerts;
-       
        numVerts = 0;
        for ( i = 0 ; i < ds->numVerts ; i++ )
        {
                counts[i] = 0;
-               firstVert[i] = numVerts;
 
                // copy first vert
                if ( numVerts == MAX_SURFACE_VERTS ) {
@@ -516,7 +511,6 @@ int         c_broken = 0;
 
 qboolean FixBrokenSurface( mapDrawSurface_t *ds )
 {
-       qboolean        valid = qtrue;
        bspDrawVert_t   *dv1, *dv2, avg;
        int                     i, j, k;
        float           dist;
@@ -531,10 +525,6 @@ qboolean FixBrokenSurface( mapDrawSurface_t *ds )
        /* check all verts */
        for( i = 0; i < ds->numVerts; i++ )
        {
-               /* don't remove points if winding is a triangle */
-               if( ds->numVerts == 3 )
-                       return valid;
-               
                /* get verts */
                dv1 = &ds->verts[ i ];
                dv2 = &ds->verts[ (i + 1) % ds->numVerts ];
@@ -544,7 +534,6 @@ qboolean FixBrokenSurface( mapDrawSurface_t *ds )
                dist = VectorLength( avg.xyz );
                if( dist < DEGENERATE_EPSILON )
                {
-                       //valid = qfalse; // no, valid = qfalse is only done if less than 3 verts are left
                        Sys_FPrintf( SYS_VRB, "WARNING: Degenerate T-junction edge found, fixing...\n" );
 
                        /* create an average drawvert */
@@ -578,13 +567,16 @@ qboolean FixBrokenSurface( mapDrawSurface_t *ds )
                                memcpy( dv2, dv1, sizeof( bspDrawVert_t ) );
                        }
                        ds->numVerts--;
+                       
+                       /* after welding, we have to consider the same vertex again, as it now has a new neighbor dv2 */
+                       --i;
+
+                       /* should ds->numVerts have become 0, then i is now -1. In the next iteration, the loop will abort. */
                }
        }
        
        /* one last check and return */
-       if( ds->numVerts < 3 )
-               valid = qfalse;
-       return valid;
+       return ds->numVerts >= 3;
 }
 
 
@@ -603,8 +595,8 @@ EdgeCompare
 int EdgeCompare( const void *elem1, const void *elem2 ) {
        float   d1, d2;
 
-       d1 = ((originalEdge_t *)elem1)->length;
-       d2 = ((originalEdge_t *)elem2)->length;
+       d1 = ((const originalEdge_t *)elem1)->length;
+       d2 = ((const originalEdge_t *)elem2)->length;
 
        if ( d1 < d2 ) {
                return -1;