msurface_t *surf;
int i, surfnum, ssize, tsize;
- if (!cl_stainmapsclearonload.integer)
+ if (!cl_stainmaps_clearonload.integer)
return;
for (i=0; i<MAX_MOD_KNOWN; i++)
Mod_FreeModel(mod);
strcpy(mod->name, name);
mod->isworldmodel = isworldmodel;
- mod->needload = true;
+ mod->loaded = false;
}
/*
crc = 0;
buf = NULL;
if (mod->isworldmodel != isworldmodel)
- mod->needload = true;
- if (mod->needload || checkdisk)
+ mod->loaded = false;
+ if (!mod->loaded || checkdisk)
{
- if (checkdisk && !mod->needload)
+ if (checkdisk && mod->loaded)
Con_DPrintf("checking model %s\n", mod->name);
buf = FS_LoadFile (mod->name, tempmempool, false);
if (buf)
{
crc = CRC_Block(buf, fs_filesize);
if (mod->crc != crc)
- mod->needload = true;
+ mod->loaded = false;
}
}
- if (!mod->needload)
+ if (mod->loaded)
return mod; // already loaded
Con_DPrintf("loading model %s\n", mod->name);
// LordHavoc: unload the existing model in this slot (if there is one)
Mod_UnloadModel(mod);
+ if (isworldmodel)
+ {
+ // clear out any stale submodels lying around, as well as the old world model itself
+ int i;
+ for (i = 0;i < MAX_MOD_KNOWN;i++)
+ if (mod_known[i].isworldmodel)
+ Mod_UnloadModel(mod_known + i);
+ }
+
// load the model
mod->isworldmodel = isworldmodel;
mod->used = true;
mod->crc = crc;
- // errors can prevent the corresponding mod->needload = false;
- mod->needload = true;
+ // errors can prevent the corresponding mod->loaded = true;
+ mod->loaded = false;
// default model radius and bounding box (mainly for missing models)
mod->radius = 16;
}
// no errors occurred
- mod->needload = false;
+ mod->loaded = true;
return mod;
}
{
if (mod)
{
- if (mod->needload)
+ if (!mod->loaded)
Mod_LoadModel(mod, true, true, mod->isworldmodel);
else
{
{
mod = freemod;
strcpy (mod->name, name);
- mod->needload = true;
+ mod->loaded = false;
mod->used = true;
return mod;
}
return NULL;
}
-/*
-==================
-Mod_TouchModel
-
-==================
-*/
-void Mod_TouchModel(const char *name)
-{
- model_t *mod;
-
- mod = Mod_FindName(name);
- mod->used = true;
-}
-
/*
==================
Mod_ForName
#if 1
// fast way, using an edge hash
-#define TRIANGLEEDGEHASH 1024
+#define TRIANGLEEDGEHASH 16384
void Mod_BuildTriangleNeighbors(int *neighbors, const int *elements, int numtriangles)
{
int i, j, p, e1, e2, *n, hashindex, count, match;
return i;
}
+void Mod_SnapVertices(int numcomponents, int numvertices, float *vertices, float snap)
+{
+ int i;
+ double isnap = 1.0 / snap;
+ for (i = 0;i < numvertices*numcomponents;i++)
+ vertices[i] = floor(vertices[i]*isnap)*snap;
+}
+
int Mod_RemoveDegenerateTriangles(int numtriangles, const int *inelement3i, int *outelement3i, const float *vertex3f)
{
int i, outtriangles;