]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.c
fix DrawQ_Fill rendering (Pic with no string)
[xonotic/darkplaces.git] / model_shared.c
index 4ece6a32638274b704f3848d68996b66b5077fcd..a2ac48e6afda20853e9bb1e81e51b97da5784726 100644 (file)
@@ -75,6 +75,7 @@ static void mod_start(void)
        for (i = 0;i < MAX_MOD_KNOWN;i++)
                if (mod_known[i].name[0])
                        Mod_UnloadModel(&mod_known[i]);
+       Mod_LoadModels();
 
        Mod_SetupNoTexture();
        Mod_BrushStartup();
@@ -270,13 +271,24 @@ void Mod_PurgeUnused(void)
                                Mod_FreeModel(mod);
 }
 
+void Mod_LoadModels(void)
+{
+       int i;
+       model_t *mod;
+
+       for (i = 0, mod = mod_known;i < MAX_MOD_KNOWN;i++, mod++)
+               if (mod->name[0])
+                       if (mod->used)
+                               Mod_CheckLoaded(mod);
+}
+
 /*
 ==================
 Mod_FindName
 
 ==================
 */
-model_t *Mod_FindName (char *name)
+model_t *Mod_FindName (const char *name)
 {
        int i;
        model_t *mod, *freemod;
@@ -319,7 +331,7 @@ Mod_TouchModel
 
 ==================
 */
-void Mod_TouchModel (char *name)
+void Mod_TouchModel (const char *name)
 {
        model_t *mod;
 
@@ -334,7 +346,7 @@ Mod_ForName
 Loads in a model for the given name
 ==================
 */
-model_t *Mod_ForName (char *name, qboolean crash, qboolean checkdisk, qboolean isworldmodel)
+model_t *Mod_ForName (const char *name, qboolean crash, qboolean checkdisk, qboolean isworldmodel)
 {
        return Mod_LoadModel (Mod_FindName (name), crash, checkdisk, isworldmodel);
 }
@@ -368,4 +380,31 @@ static void Mod_Flush (void)
        for (i = 0;i < MAX_MOD_KNOWN;i++)
                if (mod_known[i].name[0])
                        Mod_UnloadModel(&mod_known[i]);
+       Mod_LoadModels();
+}
+
+int Mod_FindTriangleWithEdge(int *elements, int numtriangles, int start, int end)
+{
+       int i;
+       for (i = 0;i < numtriangles;i++, elements += 3)
+       {
+               if (elements[0] == start && elements[1] == end)
+                       return i;
+               if (elements[1] == start && elements[2] == end)
+                       return i;
+               if (elements[2] == start && elements[0] == end)
+                       return i;
+       }
+       return -1;
+}
+
+void Mod_BuildTriangleNeighbors(int *neighbors, int *elements, int numtriangles)
+{
+       int i, *e, *n;
+       for (i = 0, e = elements, n = neighbors;i < numtriangles;i++, e += 3, n += 3)
+       {
+               n[0] = Mod_FindTriangleWithEdge(elements, numtriangles, e[1], e[0]);
+               n[1] = Mod_FindTriangleWithEdge(elements, numtriangles, e[2], e[1]);
+               n[2] = Mod_FindTriangleWithEdge(elements, numtriangles, e[0], e[2]);
+       }
 }