]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.c
fixed compile errors and warnings using Dev-C++ in "Compile as C++" mode
[xonotic/darkplaces.git] / model_shared.c
index 73326a22bb2444540479964528d4afcb3c80278b..3705359b2bbf34ece305aebd3cc6ff41a2f000f0 100644 (file)
@@ -280,9 +280,8 @@ void Mod_FrameGroupify(dp_model_t *mod, const char *buf)
        mod->numframes = cnt;
 
        // 1. reallocate
-       if(mod->animscenes)
-               Mem_Free(mod->animscenes);
-       mod->animscenes = (animscene_t *) Mem_Alloc(tempmempool, sizeof(animscene_t) * mod->numframes);
+       // (we do not free the previous animscenes, but model unloading will free the pool owning them, so it's okay)
+       mod->animscenes = (animscene_t *) Mem_Alloc(mod->mempool, sizeof(animscene_t) * mod->numframes);
 
        // 2. parse
        Mod_FrameGroupify_ParseGroups(buf, Mod_FrameGroupify_ParseGroups_Store, mod);
@@ -319,7 +318,7 @@ dp_model_t *Mod_LoadModel(dp_model_t *mod, qboolean crash, qboolean checkdisk)
                        Con_Printf("loading model %s\n", mod->name);
 
                mod->used = true;
-               mod->crc = -1;
+               mod->crc = (unsigned int)-1;
                mod->loaded = false;
 
                VectorClear(mod->normalmins);
@@ -426,8 +425,10 @@ dp_model_t *Mod_LoadModel(dp_model_t *mod, qboolean crash, qboolean checkdisk)
 
                buf = FS_LoadFile (va("%s.framegroups", mod->name), tempmempool, false, &filesize);
                if(buf)
-                       Mod_FrameGroupify(mod, buf);
-               Mem_Free(buf);
+               {
+                       Mod_FrameGroupify(mod, (const char *)buf);
+                       Mem_Free(buf);
+               }
 
                Mod_BuildVBOs();
        }
@@ -1338,7 +1339,14 @@ static void Q3Shader_AddToHash (q3shaderinfo_t* shader)
        {
                if (strcasecmp (entry->shader.name, shader->name) == 0)
                {
-                       Con_Printf("Shader '%s' already defined\n", shader->name);
+                       unsigned char *start, *end, *start2;
+                       start = (unsigned char *) (&shader->Q3SHADERINFO_COMPARE_START);
+                       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);
+                       else
+                               Con_DPrintf("Shader '%s' already defined\n", shader->name);
                        return;
                }
                lastEntry = entry;
@@ -2013,6 +2021,9 @@ nothing                GL_ZERO GL_ONE
                if (shader->backgroundlayer >= 0)
                {
                        q3shaderinfo_layer_t* backgroundlayer = shader->layers + shader->backgroundlayer;
+                       // copy over one secondarylayer parameter
+                       memcpy(texture->backgroundtcmods, backgroundlayer->tcmods, sizeof(texture->backgroundtcmods));
+                       // load the textures
                        texture->backgroundnumskinframes = backgroundlayer->numframes;
                        texture->backgroundskinframerate = backgroundlayer->framerate;
                        for (j = 0;j < backgroundlayer->numframes;j++)
@@ -2724,7 +2735,7 @@ static void Mod_Decompile_f(void)
                                        if ((animname[l] < '0' || animname[l] > '9') && animname[l] != '_')
                                                k = l + 1;
                                animname[k] = 0;
-                               count = (mod->num_poses / mod->num_bones) - first;
+                               count = mod->num_poses - first;
                                for (j = i + 1;j < mod->numframes;j++)
                                {
                                        strlcpy(animname2, mod->animscenes[j].name, sizeof(animname2));