]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.c
Added Quake 2 sprite support (.sp2 files). Added the corresponding QC extension ...
[xonotic/darkplaces.git] / model_shared.c
index 50fb26998462c43ab0094a3e8f915435b200a232..5064ac4b24189821c84c5cc2d886a50069e3db2e 100644 (file)
@@ -178,17 +178,11 @@ static void mod_newmap(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;
                                }
                        }
@@ -312,6 +306,7 @@ static model_t *Mod_LoadModel(model_t *mod, qboolean crash, qboolean checkdisk,
                else if (!memcmp(buf, "IDP2", 4)) Mod_IDP2_Load(mod, buf);
                else if (!memcmp(buf, "IDP3", 4)) Mod_IDP3_Load(mod, buf);
                else if (!memcmp(buf, "IDSP", 4)) Mod_IDSP_Load(mod, buf);
+               else if (!memcmp(buf, "IDS2", 4)) Mod_IDS2_Load(mod, buf);
                else if (!memcmp(buf, "IBSP", 4)) Mod_IBSP_Load(mod, buf);
                else if (!memcmp(buf, "ZYMOTICMODEL", 12)) Mod_ZYMOTICMODEL_Load(mod, buf);
                else if (strlen(mod->name) >= 4 && !strcmp(mod->name - 4, ".map")) Mod_MAP_Load(mod, buf);
@@ -758,15 +753,13 @@ void Mod_BuildTextureVectorsAndNormals(int numverts, int numtriangles, const flo
                        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)
        {
@@ -786,12 +779,9 @@ surfmesh_t *Mod_AllocSurfMesh(mempool_t *mempool, int numvertices, int numtriang
        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;
 }