]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_brush.c
moved CHECKGLERROR to detect errors *after* rather than before uploading a texture
[xonotic/darkplaces.git] / model_brush.c
index 63880a90e3a13f1062651791eef5da0dfb5b99e4..fd872c89a0c44f2d9da8f506d8ca4d0d7da7295c 100644 (file)
@@ -372,7 +372,7 @@ static void Mod_LoadTextures (lump_t *l)
                                        }
                                        if (fullbrights)
                                        {
-                                               data2 = Mem_Alloc(tempmempool, tx->width*tx->height);
+                                               data2 = Mem_Alloc(loadmodel->mempool, tx->width*tx->height);
                                                for (j = 0;j < tx->width*tx->height;j++)
                                                        data2[j] = data[j] >= 224 ? 0 : data[j]; // no fullbrights
                                                tx->texture = R_LoadTexture (loadmodel->texturepool, tx->name, tx->width, tx->height, data2, TEXTYPE_QPALETTE, TEXF_MIPMAP | TEXF_PRECACHE);
@@ -1217,10 +1217,6 @@ static void Mod_LoadFaces (lump_t *l)
                out->cached_dlight = true;
                out->cached_ambient = -1000;
                out->cached_lightscalebit = -1000;
-               out->cached_light[0] = -1000;
-               out->cached_light[1] = -1000;
-               out->cached_light[2] = -1000;
-               out->cached_light[3] = -1000;
 
                CalcSurfaceExtents (out);
 
@@ -1641,16 +1637,11 @@ static void Mod_LoadPlanes (lump_t *l)
 typedef struct
 {
        int numpoints;
+       int padding;
        double points[8][3]; // variable sized
 }
 winding_t;
 
-typedef struct
-{
-       int numpoints;
-}
-windingsizeof_t;
-
 /*
 ==================
 NewWinding
@@ -1662,10 +1653,10 @@ static winding_t *NewWinding (int points)
        int size;
 
        if (points > MAX_POINTS_ON_WINDING)
-               Host_Error("NewWinding: too many points\n");
+               Sys_Error("NewWinding: too many points\n");
 
-       size = sizeof(windingsizeof_t) + sizeof(double[3]) * points;
-       w = Mem_Alloc(tempmempool, size);
+       size = sizeof(winding_t) + sizeof(double[3]) * (points - 8);
+       w = Mem_Alloc(loadmodel->mempool, size);
        memset (w, 0, size);
 
        return w;
@@ -1765,10 +1756,16 @@ static winding_t *ClipWinding (winding_t *in, mplane_t *split, int keepon)
                return in;
 
        maxpts = in->numpoints+4;       // can't use counts[0]+2 because of fp grouping errors
+       if (maxpts > MAX_POINTS_ON_WINDING)
+               Sys_Error ("ClipWinding: maxpts > MAX_POINTS_ON_WINDING");
+
        neww = NewWinding (maxpts);
 
        for (i = 0;i < in->numpoints;i++)
        {
+               if (neww->numpoints >= maxpts)
+                       Sys_Error ("ClipWinding: points exceeded estimate");
+
                p1 = in->points[i];
 
                if (sides[i] == SIDE_ON)
@@ -1805,12 +1802,12 @@ static winding_t *ClipWinding (winding_t *in, mplane_t *split, int keepon)
                neww->numpoints++;
        }
 
-       if (neww->numpoints > maxpts)
-               Host_Error ("ClipWinding: points exceeded estimate");
-
        // free the original winding
        FreeWinding (in);
 
+       // debugging
+       Mem_CheckSentinels(neww);
+
        return neww;
 }
 
@@ -1868,11 +1865,17 @@ static void DivideWinding (winding_t *in, mplane_t *split, winding_t **front, wi
 
        maxpts = in->numpoints+4;       // can't use counts[0]+2 because of fp grouping errors
 
+       if (maxpts > MAX_POINTS_ON_WINDING)
+               Sys_Error ("ClipWinding: maxpts > MAX_POINTS_ON_WINDING");
+
        *front = f = NewWinding (maxpts);
        *back = b = NewWinding (maxpts);
 
        for (i = 0;i < in->numpoints;i++)
        {
+               if (f->numpoints >= maxpts || b->numpoints >= maxpts)
+                       Sys_Error ("DivideWinding: points exceeded estimate");
+
                p1 = in->points[i];
 
                if (sides[i] == SIDE_ON)
@@ -1918,8 +1921,9 @@ static void DivideWinding (winding_t *in, mplane_t *split, winding_t **front, wi
                b->numpoints++;
        }
 
-       if (f->numpoints > maxpts || b->numpoints > maxpts)
-               Host_Error ("DivideWinding: points exceeded estimate");
+       // debugging
+       Mem_CheckSentinels(f);
+       Mem_CheckSentinels(b);
 }
 
 typedef struct portal_s
@@ -1942,7 +1946,7 @@ AllocPortal
 static portal_t *AllocPortal (void)
 {
        portal_t *p;
-       p = Mem_Alloc(tempmempool, sizeof(portal_t));
+       p = Mem_Alloc(loadmodel->mempool, sizeof(portal_t));
        //memset(p, 0, sizeof(portal_t));
        p->chain = portalchain;
        portalchain = p;
@@ -1980,6 +1984,8 @@ static void Mod_FinalizePortals(void)
        mleaf_t *leaf, *endleaf;
        winding_t *w;
 
+       //Mem_CheckSentinelsGlobal();
+
        // recalculate bounding boxes for all leafs (because qbsp is very sloppy)
        leaf = loadmodel->leafs;
        endleaf = leaf + loadmodel->numleafs;
@@ -2013,6 +2019,8 @@ static void Mod_FinalizePortals(void)
 
        Mod_RecursiveRecalcNodeBBox(loadmodel->nodes);
 
+       //Mem_CheckSentinelsGlobal();
+
        // tally up portal and point counts
        p = portalchain;
        numportals = 0;
@@ -2103,6 +2111,8 @@ static void Mod_FinalizePortals(void)
                FreePortal(p);
                p = pnext;
        }
+
+       //Mem_CheckSentinelsGlobal();
 }
 
 /*
@@ -2205,6 +2215,7 @@ static void Mod_RecursiveNodePortals (mnode_t *node)
        nodeportal->plane = *node->plane;
 
        nodeportalwinding = BaseWindingForPlane (node->plane);
+       //Mem_CheckSentinels(nodeportalwinding);
        side = 0;       // shut up compiler warning
        for (portal = (portal_t *)node->portals;portal;portal = portal->next[side])
        {