]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.c
added support for GL_ARB_texture_env_combine, currently only used on wall rendering...
[xonotic/darkplaces.git] / model_shared.c
index 65acc092ded219f785bac43cadbdaf6c2c488e6e..6209ace388328f1c5d0ef7b8ea6b2d2158906a88 100644 (file)
@@ -27,21 +27,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 model_t        *loadmodel;
 char   loadname[32];   // for hunk tags
 
-extern void Mod_LoadSpriteModel (model_t *mod, void *buffer);
-extern void Mod_LoadBrushModel (model_t *mod, void *buffer);
-extern void Mod_LoadAliasModel (model_t *mod, void *buffer);
-extern void Mod_LoadQ2AliasModel (model_t *mod, void *buffer);
-extern void Mod_LoadZymoticModel (model_t *mod, void *buffer);
-model_t *Mod_LoadModel (model_t *mod, qboolean crash);
-
-#define        MAX_MOD_KNOWN   512
+// LordHavoc: increased from 512 to 2048
+#define        MAX_MOD_KNOWN   2048
 model_t        mod_known[MAX_MOD_KNOWN];
 int            mod_numknown;
 
-extern void Mod_BrushInit();
-extern void Mod_AliasInit();
-extern void Mod_SpriteInit();
-
 /*
 ===============
 Mod_Init
@@ -64,13 +54,13 @@ Caches the data if needed
 void *Mod_Extradata (model_t *mod)
 {
        void    *r;
-       
+
        r = Cache_Check (&mod->cache);
        if (r)
                return r;
 
        Mod_LoadModel (mod, true);
-       
+
        if (!mod->cache.data)
                Host_Error ("Mod_Extradata: caching failed");
        return mod->cache.data;
@@ -85,9 +75,9 @@ void Mod_ClearAll (void)
 {
        int             i;
        model_t *mod;
-       
+
        for (i=0 , mod=mod_known ; i<mod_numknown ; i++, mod++)
-               if (mod->type != mod_alias)
+               if (!mod->cachesize)
                        mod->needload = true;
 }
 
@@ -101,17 +91,17 @@ model_t *Mod_FindName (char *name)
 {
        int             i;
        model_t *mod;
-       
+
        if (!name[0])
                Host_Error ("Mod_ForName: NULL name");
-               
+
 //
 // search the currently loaded models
 //
        for (i=0 , mod=mod_known ; i<mod_numknown ; i++, mod++)
                if (!strcmp (mod->name, name) )
                        break;
-                       
+
        if (i == mod_numknown)
        {
                if (mod_numknown == MAX_MOD_KNOWN)
@@ -133,14 +123,12 @@ Mod_TouchModel
 void Mod_TouchModel (char *name)
 {
        model_t *mod;
-       
+
        mod = Mod_FindName (name);
-       
+
        if (!mod->needload)
-       {
-               if (mod->type == mod_alias)
+               if (mod->cachesize)
                        Cache_Check (&mod->cache);
-       }
 }
 
 /*
@@ -157,7 +145,7 @@ model_t *Mod_LoadModel (model_t *mod, qboolean crash)
 
        if (!mod->needload)
        {
-               if (mod->type == mod_alias)
+               if (mod->cachesize)
                {
                        d = Cache_Check (&mod->cache);
                        if (d)
@@ -177,15 +165,20 @@ model_t *Mod_LoadModel (model_t *mod, qboolean crash)
                        Host_Error ("Mod_NumForName: %s not found", mod->name); // LordHavoc: Sys_Error was *ANNOYING*
                return NULL;
        }
-       
+
 // allocate a new model
-       COM_FileBase (mod->name, loadname);
-       
+//     COM_FileBase (mod->name, loadname);
+       strcpy(loadname, mod->name);
+
        loadmodel = mod;
 
 // call the apropriate loader
        mod->needload = false;
-       
+
+       // LordHavoc: clear some important stuff in the model_t structure
+       mod->flags = 0;
+       mod->flags2 = 0;
+
        switch (LittleLong(*(unsigned *)buf))
        {
        case IDPOLYHEADER:
@@ -199,7 +192,7 @@ model_t *Mod_LoadModel (model_t *mod, qboolean crash)
        case (('O'<<24)+('M'<<16)+('Y'<<8)+'Z'):
                Mod_LoadZymoticModel(mod, buf);
                break;
-               
+
        case IDSPRITEHEADER:
                Mod_LoadSpriteModel (mod, buf);
                break;
@@ -262,7 +255,7 @@ void Mod_Print (void)
        Con_Printf ("Cached models:\n");
        for (i=0, mod=mod_known ; i < mod_numknown ; i++, mod++)
        {
-               Con_Printf ("%8p : %s\n",mod->cache.data, mod->name);
+               Con_Printf ("%4iK : %8p : %s\n", (mod->cachesize + 1023) / 1024, mod->cache.data, mod->name);
        }
 }