]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.c
mempools now have sentinel checks, for completeness
[xonotic/darkplaces.git] / model_shared.c
index 4151100ee1de0775467b6e67c1dd6f2d64977749..4ece6a32638274b704f3848d68996b66b5077fcd 100644 (file)
@@ -24,18 +24,60 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 #include "quakedef.h"
 
-model_t        *loadmodel;
+model_t *loadmodel;
 
 // LordHavoc: increased from 512 to 2048
 #define        MAX_MOD_KNOWN   2048
 static model_t mod_known[MAX_MOD_KNOWN];
 
+rtexture_t *r_notexture;
+rtexturepool_t *r_notexturepool;
+
+texture_t r_surf_notexture;
+
+void Mod_SetupNoTexture(void)
+{
+       int x, y;
+       qbyte pix[16][16][4];
+
+       // this makes a light grey/dark grey checkerboard texture
+       for (y = 0;y < 16;y++)
+       {
+               for (x = 0;x < 16;x++)
+               {
+                       if ((y < 8) ^ (x < 8))
+                       {
+                               pix[y][x][0] = 128;
+                               pix[y][x][1] = 128;
+                               pix[y][x][2] = 128;
+                               pix[y][x][3] = 255;
+                       }
+                       else
+                       {
+                               pix[y][x][0] = 64;
+                               pix[y][x][1] = 64;
+                               pix[y][x][2] = 64;
+                               pix[y][x][3] = 255;
+                       }
+               }
+       }
+
+       r_notexturepool = R_AllocTexturePool();
+       r_notexture = R_LoadTexture(r_notexturepool, "notexture", 16, 16, &pix[0][0][0], TEXTYPE_RGBA, TEXF_MIPMAP);
+}
+
+extern void Mod_BrushStartup (void);
+extern void Mod_BrushShutdown (void);
+
 static void mod_start(void)
 {
        int i;
        for (i = 0;i < MAX_MOD_KNOWN;i++)
                if (mod_known[i].name[0])
                        Mod_UnloadModel(&mod_known[i]);
+
+       Mod_SetupNoTexture();
+       Mod_BrushStartup();
 }
 
 static void mod_shutdown(void)
@@ -44,6 +86,9 @@ static void mod_shutdown(void)
        for (i = 0;i < MAX_MOD_KNOWN;i++)
                if (mod_known[i].name[0])
                        Mod_UnloadModel(&mod_known[i]);
+
+       R_FreeTexturePool(&r_notexturepool);
+       Mod_BrushShutdown();
 }
 
 static void mod_newmap(void)
@@ -151,9 +196,6 @@ static model_t *Mod_LoadModel (model_t *mod, qboolean crash, qboolean checkdisk,
                crc = CRC_Block(buf, com_filesize);
        }
 
-       // make sure nothing got trashed
-       //Mem_CheckSentinelsGlobal();
-
        // allocate a new model
        loadmodel = mod;
 
@@ -179,9 +221,6 @@ static model_t *Mod_LoadModel (model_t *mod, qboolean crash, qboolean checkdisk,
 
        Mem_Free(buf);
 
-       // make sure nothing got trashed
-       //Mem_CheckSentinelsGlobal();
-
        return mod;
 }
 
@@ -208,21 +247,12 @@ Mod_ClearAll
 */
 void Mod_ClearAll (void)
 {
-       /*
-       int             i;
-       model_t *mod;
-
-       for (i = 0, mod = mod_known;i < MAX_MOD_KNOWN;i++, mod++)
-               if (mod->name[0])
-                       if (mod->usesheap)
-                               Mod_FreeModel(mod);
-       */
 }
 
 void Mod_ClearUsed(void)
 {
-       int             i;
-       model_t *mod;
+       int i;
+       model_t *mod;
 
        for (i = 0, mod = mod_known;i < MAX_MOD_KNOWN;i++, mod++)
                if (mod->name[0])
@@ -231,8 +261,8 @@ void Mod_ClearUsed(void)
 
 void Mod_PurgeUnused(void)
 {
-       int             i;
-       model_t *mod;
+       int i;
+       model_t *mod;
 
        for (i = 0, mod = mod_known;i < MAX_MOD_KNOWN;i++, mod++)
                if (mod->name[0])
@@ -248,8 +278,8 @@ Mod_FindName
 */
 model_t *Mod_FindName (char *name)
 {
-       int             i;
-       model_t *mod, *freemod;
+       int i;
+       model_t *mod, *freemod;
 
        if (!name[0])
                Host_Error ("Mod_ForName: NULL name");
@@ -311,23 +341,6 @@ model_t *Mod_ForName (char *name, qboolean crash, qboolean checkdisk, qboolean i
 
 qbyte *mod_base;
 
-/*
-=================
-RadiusFromBounds
-=================
-*/
-/*
-float RadiusFromBounds (vec3_t mins, vec3_t maxs)
-{
-       int             i;
-       vec3_t  corner;
-
-       for (i=0 ; i<3 ; i++)
-               corner[i] = fabs(mins[i]) > fabs(maxs[i]) ? fabs(mins[i]) : fabs(maxs[i]);
-
-       return Length (corner);
-}
-*/
 
 //=============================================================================
 
@@ -356,4 +369,3 @@ static void Mod_Flush (void)
                if (mod_known[i].name[0])
                        Mod_UnloadModel(&mod_known[i]);
 }
-