]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
reworked R_SkinFrame_Purge handling to encapsulate all modules, not just
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Fri, 6 Nov 2009 11:36:27 +0000 (11:36 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Fri, 6 Nov 2009 11:36:27 +0000 (11:36 +0000)
the model system, this allows skinframes to be persistent across levels
without being associated with a model

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9429 d7cf8633-e32d-0410-b094-e92efae38249

model_shared.c
r_modules.c

index 963140bdd11b657ef4b41fee9543a2275e9f43c5..6ea5a859889fd9dd68b48a6686907b446259baee 100644 (file)
@@ -91,21 +91,23 @@ static void mod_newmap(void)
        int nummodels = Mem_ExpandableArray_IndexRange(&models);
        dp_model_t *mod;
 
-       R_SkinFrame_PrepareForPurge();
        for (i = 0;i < nummodels;i++)
        {
-               if ((mod = (dp_model_t*) Mem_ExpandableArray_RecordAtIndex(&models, i)) && mod->mempool && mod->data_textures)
+               if ((mod = (dp_model_t*) Mem_ExpandableArray_RecordAtIndex(&models, i)) && mod->mempool)
                {
-                       for (j = 0;j < mod->num_textures;j++)
+                       for (j = 0;j < mod->num_textures && mod->data_textures;j++)
                        {
                                for (k = 0;k < mod->data_textures[j].numskinframes;k++)
                                        R_SkinFrame_MarkUsed(mod->data_textures[j].skinframes[k]);
                                for (k = 0;k < mod->data_textures[j].backgroundnumskinframes;k++)
                                        R_SkinFrame_MarkUsed(mod->data_textures[j].backgroundskinframes[k]);
                        }
+                       if (mod->brush.solidskyskinframe)
+                               R_SkinFrame_MarkUsed(mod->brush.solidskyskinframe);
+                       if (mod->brush.alphaskyskinframe)
+                               R_SkinFrame_MarkUsed(mod->brush.alphaskyskinframe);
                }
        }
-       R_SkinFrame_Purge();
 
        if (!cl_stainmaps_clearonload.integer)
                return;
index df260db6780f1de6006ebd44c4877e12a9948c34..91221fc3923bc971b162135917c2d7e91e6803c7 100644 (file)
@@ -85,6 +85,7 @@ void R_Modules_Restart(void)
 void R_Modules_NewMap(void)
 {
        int i;
+       R_SkinFrame_PrepareForPurge();
        for (i = 0;i < MAXRENDERMODULES;i++)
        {
                if (rendermodule[i].name == NULL)
@@ -93,5 +94,6 @@ void R_Modules_NewMap(void)
                        continue;
                rendermodule[i].newmap();
        }
+       R_SkinFrame_Purge();
 }