]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.c
reduce memory usage by several more megabytes
[xonotic/darkplaces.git] / model_shared.c
index 771aa39b44e5a0a1e1e33ed0a524b29eeb1abea2..a5f23db9d443d52b3c3d17220d111bbc25e50d09 100644 (file)
@@ -655,12 +655,13 @@ void Mod_BuildTriangleNeighbors(int *neighbors, const int *elements, int numtria
                int element[2];
        }
        edgehashentry_t;
-       edgehashentry_t *edgehash[TRIANGLEEDGEHASH], *edgehashentries, edgehashentriesbuffer[TRIANGLEEDGEHASH*3], *hash;
-       memset(edgehash, 0, sizeof(edgehash));
-       edgehashentries = edgehashentriesbuffer;
+       static edgehashentry_t **edgehash;
+       edgehashentry_t *edgehashentries, *hash;
+       if (!numtriangles)
+               return;
+       edgehash = Mem_Alloc(tempmempool, TRIANGLEEDGEHASH * sizeof(*edgehash));
        // if there are too many triangles for the stack array, allocate larger buffer
-       if (numtriangles > TRIANGLEEDGEHASH)
-               edgehashentries = (edgehashentry_t *)Mem_Alloc(tempmempool, numtriangles * 3 * sizeof(edgehashentry_t));
+       edgehashentries = (edgehashentry_t *)Mem_Alloc(tempmempool, numtriangles * 3 * sizeof(edgehashentry_t));
        // find neighboring triangles
        for (i = 0, e = elements, n = neighbors;i < numtriangles;i++, e += 3, n += 3)
        {
@@ -709,8 +710,8 @@ void Mod_BuildTriangleNeighbors(int *neighbors, const int *elements, int numtria
                CL_KeepaliveMessage(false);
        }
        // free the allocated buffer
-       if (edgehashentries != edgehashentriesbuffer)
-               Mem_Free(edgehashentries);
+       Mem_Free(edgehashentries);
+       Mem_Free(edgehash);
 }
 #else
 // very slow but simple way
@@ -1482,7 +1483,7 @@ static void Q3Shader_AddToHash (q3shaderinfo_t* shader)
                        end = ((unsigned char *) (&shader->Q3SHADERINFO_COMPARE_END)) + sizeof(shader->Q3SHADERINFO_COMPARE_END);
                        start2 = (unsigned char *) (&entry->shader.Q3SHADERINFO_COMPARE_START);
                        if(memcmp(start, start2, end - start))
-                               Con_Printf("Shader '%s' already defined, ignoring mismatching redeclaration\n", shader->name);
+                               Con_DPrintf("Shader '%s' already defined, ignoring mismatching redeclaration\n", shader->name);
                        else
                                Con_DPrintf("Shader '%s' already defined\n", shader->name);
                        return;
@@ -1556,7 +1557,7 @@ void Mod_LoadQ3Shaders(void)
                        strlcpy(shader.name, com_token, sizeof(shader.name));
                        if (!COM_ParseToken_QuakeC(&text, false) || strcasecmp(com_token, "{"))
                        {
-                               Con_Printf("%s parsing error - expected \"{\", found \"%s\"\n", search->filenames[fileindex], com_token);
+                               Con_DPrintf("%s parsing error - expected \"{\", found \"%s\"\n", search->filenames[fileindex], com_token);
                                break;
                        }
                        while (COM_ParseToken_QuakeC(&text, false))
@@ -1600,12 +1601,12 @@ void Mod_LoadQ3Shaders(void)
                                                }
                                                //for (j = numparameters;j < TEXTURE_MAXFRAMES + 4;j++)
                                                //      parameter[j][0] = 0;
-                                               if (developer.integer >= 100)
+                                               if (developer_insane.integer)
                                                {
-                                                       Con_Printf("%s %i: ", shader.name, shader.numlayers - 1);
+                                                       Con_DPrintf("%s %i: ", shader.name, shader.numlayers - 1);
                                                        for (j = 0;j < numparameters;j++)
-                                                               Con_Printf(" %s", parameter[j]);
-                                                       Con_Print("\n");
+                                                               Con_DPrintf(" %s", parameter[j]);
+                                                       Con_DPrint("\n");
                                                }
                                                if (numparameters >= 2 && !strcasecmp(parameter[0], "blendfunc"))
                                                {
@@ -1797,7 +1798,7 @@ void Mod_LoadQ3Shaders(void)
                                                        shader.textureblendalpha = true;
                                                }
                                        }
-                                       layer->texflags = TEXF_ALPHA | TEXF_PRECACHE;
+                                       layer->texflags = TEXF_ALPHA;
                                        if (!(shader.surfaceparms & Q3SURFACEPARM_NOMIPMAPS))
                                                layer->texflags |= TEXF_MIPMAP;
                                        if (!(shader.textureflags & Q3TEXTUREFLAG_NOPICMIP))
@@ -1821,12 +1822,12 @@ void Mod_LoadQ3Shaders(void)
                                //      parameter[j][0] = 0;
                                if (fileindex == 0 && !strcasecmp(com_token, "}"))
                                        break;
-                               if (developer.integer >= 100)
+                               if (developer_insane.integer)
                                {
-                                       Con_Printf("%s: ", shader.name);
+                                       Con_DPrintf("%s: ", shader.name);
                                        for (j = 0;j < numparameters;j++)
-                                               Con_Printf(" %s", parameter[j]);
-                                       Con_Print("\n");
+                                               Con_DPrintf(" %s", parameter[j]);
+                                       Con_DPrint("\n");
                                }
                                if (numparameters < 1)
                                        continue;
@@ -2068,6 +2069,9 @@ qboolean Mod_LoadTextureFromQ3Shader(texture_t *texture, const char *name, qbool
                texflagsmask &= ~TEXF_COMPRESS;
        texture->specularscalemod = 1; // unless later loaded from the shader
        texture->specularpowermod = 1; // unless later loaded from the shader
+       // WHEN ADDING DEFAULTS HERE, REMEMBER TO SYNC TO SHADER LOADING ABOVE
+       // HERE, AND Q1BSP LOADING
+       // JUST GREP FOR "specularscalemod = 1".
 
        if (shader)
        {
@@ -2207,21 +2211,21 @@ nothing                GL_ZERO GL_ONE
        }
        else if (!strcmp(texture->name, "noshader") || !texture->name[0])
        {
-               if (developer.integer >= 100)
-                       Con_Printf("^1%s:^7 using fallback noshader material for ^3\"%s\"\n", loadmodel->name, name);
+               if (developer_extra.integer)
+                       Con_DPrintf("^1%s:^7 using fallback noshader material for ^3\"%s\"\n", loadmodel->name, name);
                texture->surfaceparms = 0;
        }
        else if (!strcmp(texture->name, "common/nodraw") || !strcmp(texture->name, "textures/common/nodraw"))
        {
-               if (developer.integer >= 100)
-                       Con_Printf("^1%s:^7 using fallback nodraw material for ^3\"%s\"\n", loadmodel->name, name);
+               if (developer_extra.integer)
+                       Con_DPrintf("^1%s:^7 using fallback nodraw material for ^3\"%s\"\n", loadmodel->name, name);
                texture->surfaceparms = 0;
                texture->basematerialflags = MATERIALFLAG_NODRAW | MATERIALFLAG_NOSHADOW;
        }
        else
        {
-               if (developer.integer >= 100)
-                       Con_Printf("^1%s:^7 No shader found for texture ^3\"%s\"\n", loadmodel->name, texture->name);
+               if (developer_extra.integer)
+                       Con_DPrintf("^1%s:^7 No shader found for texture ^3\"%s\"\n", loadmodel->name, texture->name);
                texture->surfaceparms = 0;
                if (texture->surfaceflags & Q3SURFACEFLAG_NODRAW)
                        texture->basematerialflags |= MATERIALFLAG_NODRAW | MATERIALFLAG_NOSHADOW;
@@ -2479,7 +2483,7 @@ void Mod_MakeSortedSurfaces(dp_model_t *mod)
 
 static void Mod_BuildVBOs(void)
 {
-       if (developer.integer && loadmodel->surfmesh.data_element3s && loadmodel->surfmesh.data_element3i)
+       if (gl_paranoid.integer && loadmodel->surfmesh.data_element3s && loadmodel->surfmesh.data_element3i)
        {
                int i;
                for (i = 0;i < loadmodel->surfmesh.num_triangles*3;i++)
@@ -3073,7 +3077,7 @@ static void Mod_GenerateLightmaps_CreateLights_ComputeSVBSP_InsertSurfaces(const
        const float *vertex3f = model->surfmesh.data_vertex3f;
        const int *element3i = model->surfmesh.data_element3i;
        const int *e;
-       double v2[3][3];
+       float v2[3][3];
        for (surfaceindex = 0, surface = model->data_surfaces;surfaceindex < model->nummodelsurfaces;surfaceindex++, surface++)
        {
                if (!BoxesOverlap(surface->mins, surface->maxs, mins, maxs))
@@ -3094,7 +3098,7 @@ static void Mod_GenerateLightmaps_CreateLights_ComputeSVBSP(dp_model_t *model, l
 {
        int maxnodes = 1<<14;
        svbsp_node_t *nodes;
-       double origin[3];
+       float origin[3];
        float mins[3];
        float maxs[3];
        svbsp_t svbsp;
@@ -3737,8 +3741,8 @@ static void Mod_GenerateLightmaps_CreateLightmaps(dp_model_t *model)
 
        for (lightmapindex = 0;lightmapindex < model->brushq3.num_mergedlightmaps;lightmapindex++)
        {
-               model->brushq3.data_lightmaps[lightmapindex] = R_LoadTexture2D(model->texturepool, va("lightmap%i", lightmapindex), lm_texturesize, lm_texturesize, lightmappixels + lightmapindex * lm_texturesize * lm_texturesize * 4, TEXTYPE_BGRA, TEXF_FORCELINEAR | TEXF_PRECACHE, NULL);
-               model->brushq3.data_deluxemaps[lightmapindex] = R_LoadTexture2D(model->texturepool, va("deluxemap%i", lightmapindex), lm_texturesize, lm_texturesize, deluxemappixels + lightmapindex * lm_texturesize * lm_texturesize * 4, TEXTYPE_BGRA, TEXF_FORCELINEAR | TEXF_PRECACHE, NULL);
+               model->brushq3.data_lightmaps[lightmapindex] = R_LoadTexture2D(model->texturepool, va("lightmap%i", lightmapindex), lm_texturesize, lm_texturesize, lightmappixels + lightmapindex * lm_texturesize * lm_texturesize * 4, TEXTYPE_BGRA, TEXF_FORCELINEAR, NULL);
+               model->brushq3.data_deluxemaps[lightmapindex] = R_LoadTexture2D(model->texturepool, va("deluxemap%i", lightmapindex), lm_texturesize, lm_texturesize, deluxemappixels + lightmapindex * lm_texturesize * lm_texturesize * 4, TEXTYPE_BGRA, TEXF_FORCELINEAR, NULL);
        }
 
        if (lightmappixels)