X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=model_shared.c;h=6209ace388328f1c5d0ef7b8ea6b2d2158906a88;hb=685e171914f1c0709b04ca02c97505a4055001f0;hp=d9d0efbcc665a81f6049fad450e50704f65f1927;hpb=a71156e14d3f1144f73e52ca14a2925c2420cfd0;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.c b/model_shared.c index d9d0efbc..6209ace3 100644 --- a/model_shared.c +++ b/model_shared.c @@ -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 ; itype != 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 ; iname, 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,16 +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); 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: @@ -200,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; @@ -263,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); } }