static model_t mod_known[MAX_MOD_KNOWN];
rtexturepool_t *mod_shared_texturepool;
-rtexture_t *r_notexture;
+rtexture_t *r_texture_notexture;
rtexture_t *mod_shared_detailtextures[NUM_DETAILTEXTURES];
rtexture_t *mod_shared_distorttexture[64];
return;
}
-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_notexture = R_LoadTexture2D(mod_shared_texturepool, "notexture", 16, 16, &pix[0][0][0], TEXTYPE_RGBA, TEXF_MIPMAP, NULL);
}
static void mod_start(void)
{
for (surfacenum = 0, surface = mod_known[i].brush.data_surfaces;surfacenum < mod_known[i].brush.num_surfaces;surfacenum++, surface++)
{
- if (surface->stainsamples)
+ if (surface->lightmapinfo && surface->lightmapinfo->stainsamples)
{
- ssize = (surface->extents[0] >> 4) + 1;
- tsize = (surface->extents[1] >> 4) + 1;
-
- if (ssize > 256 || tsize > 256)
- Host_Error("Bad surface extents");
-
- if (surface->stainsamples)
- memset(surface->stainsamples, 255, ssize * tsize * 3);
-
+ ssize = (surface->lightmapinfo->extents[0] >> 4) + 1;
+ tsize = (surface->lightmapinfo->extents[1] >> 4) + 1;
+ memset(surface->lightmapinfo->stainsamples, 255, ssize * tsize * 3);
surface->cached_dlight = true;
}
}
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_FreeModel(mod);
}
+// only used during loading!
+void Mod_RemoveStaleWorldModels(model_t *skip)
+{
+ int i;
+ for (i = 0;i < MAX_MOD_KNOWN;i++)
+ if (mod_known[i].isworldmodel && skip != &mod_known[i])
+ Mod_UnloadModel(mod_known + i);
+}
+
void Mod_LoadModels(void)
{
int i;
VectorNormalize(v);
}
-surfmesh_t *Mod_AllocSurfMesh(mempool_t *mempool, int numvertices, int numtriangles, int numcollisionvertices, int numcollisiontriangles, qboolean detailtexcoords, qboolean lightmapoffsets, qboolean vertexcolors)
+surfmesh_t *Mod_AllocSurfMesh(mempool_t *mempool, int numvertices, int numtriangles, qboolean detailtexcoords, qboolean lightmapoffsets, qboolean vertexcolors, qboolean neighbors)
{
surfmesh_t *mesh;
qbyte *data;
- mesh = Mem_Alloc(mempool, sizeof(surfmesh_t) + numvertices * (3 + 3 + 3 + 3 + 2 + 2 + (detailtexcoords ? 2 : 0) + (vertexcolors ? 4 : 0)) * sizeof(float) + numvertices * (lightmapoffsets ? 1 : 0) * sizeof(int) + numtriangles * (3 + 3) * sizeof(int) + numcollisionvertices * sizeof(float[3]) + numcollisiontriangles * sizeof(int[3]));
+ mesh = Mem_Alloc(mempool, sizeof(surfmesh_t) + numvertices * (3 + 3 + 3 + 3 + 2 + 2 + (detailtexcoords ? 2 : 0) + (vertexcolors ? 4 : 0)) * sizeof(float) + numvertices * (lightmapoffsets ? 1 : 0) * sizeof(int) + numtriangles * (3 + (neighbors ? 3 : 0)) * sizeof(int));
mesh->num_vertices = numvertices;
mesh->num_triangles = numtriangles;
- mesh->num_collisionvertices = numcollisionvertices;
- mesh->num_collisiontriangles = numcollisiontriangles;
data = (qbyte *)(mesh + 1);
if (mesh->num_vertices)
{
if (mesh->num_triangles)
{
mesh->data_element3i = (int *)data, data += sizeof(int[3]) * mesh->num_triangles;
- mesh->data_neighbor3i = (int *)data, data += sizeof(int[3]) * mesh->num_triangles;
+ if (neighbors)
+ mesh->data_neighbor3i = (int *)data, data += sizeof(int[3]) * mesh->num_triangles;
}
- if (mesh->num_collisionvertices)
- mesh->data_collisionvertex3f = (float *)data, data += sizeof(float[3]) * mesh->num_collisionvertices;
- if (mesh->num_collisiontriangles)
- mesh->data_collisionelement3i = (int *)data, data += sizeof(int[3]) * mesh->num_collisiontriangles;
return mesh;
}