]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.c
weapon models were not being lit in maps using .lights
[xonotic/darkplaces.git] / model_shared.c
index f9fc38aec318cdc025f9d3f2d493c809edc0ceb1..adbe9348adaaa8f4360df748a39f8ccb58beb301 100644 (file)
@@ -30,12 +30,54 @@ model_t *loadmodel;
 #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,15 +247,6 @@ 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)
@@ -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);
-}
-*/
 
 //=============================================================================