X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=model_shared.c;h=a2ac48e6afda20853e9bb1e81e51b97da5784726;hb=ddf1a5d737f23d10c48937847a917374eccfd032;hp=adbe9348adaaa8f4360df748a39f8ccb58beb301;hpb=45bff1c2dd893d329c86aa043661187b86da6609;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.c b/model_shared.c index adbe9348..a2ac48e6 100644 --- a/model_shared.c +++ b/model_shared.c @@ -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(); @@ -251,8 +252,8 @@ void Mod_ClearAll (void) void Mod_ClearUsed(void) { - int i; - model_t *mod; + int i; + model_t *mod; for (i = 0, mod = mod_known;i < MAX_MOD_KNOWN;i++, mod++) if (mod->name[0]) @@ -261,8 +262,8 @@ void Mod_ClearUsed(void) void Mod_PurgeUnused(void) { - int i; - model_t *mod; + int i; + model_t *mod; for (i = 0, mod = mod_known;i < MAX_MOD_KNOWN;i++, mod++) if (mod->name[0]) @@ -270,16 +271,27 @@ 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; + int i; + model_t *mod, *freemod; if (!name[0]) Host_Error ("Mod_ForName: NULL name"); @@ -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,5 +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]); + } +}