From 1fdb0f81e63999277a34634590f3dbd134225e85 Mon Sep 17 00:00:00 2001 From: Denis Pauk Date: Tue, 31 Dec 2024 15:22:08 +0200 Subject: [PATCH] renders: check min/max on nodes load --- src/client/refresh/files/maps.c | 39 ++++++++++++++++++++++++++---- src/client/refresh/gl1/gl1_model.c | 4 +-- src/client/refresh/gl3/gl3_model.c | 4 +-- src/client/refresh/gl4/gl4_model.c | 4 +-- src/client/refresh/ref_shared.h | 2 +- src/client/refresh/soft/sw_model.c | 4 +-- src/client/refresh/vk/vk_model.c | 4 +-- 7 files changed, 45 insertions(+), 16 deletions(-) diff --git a/src/client/refresh/files/maps.c b/src/client/refresh/files/maps.c index 04ebc70a..71c96f9c 100644 --- a/src/client/refresh/files/maps.c +++ b/src/client/refresh/files/maps.c @@ -80,8 +80,8 @@ Mod_NumberLeafs(mleaf_t *leafs, mnode_t *node, int *r_leaftovis, int *r_vistolea static void Mod_LoadQNodes(const char *name, cplane_t *planes, int numplanes, mleaf_t *leafs, - int numleafs, mnode_t **nodes, int *numnodes, const byte *mod_base, - const lump_t *l) + int numleafs, mnode_t **nodes, int *numnodes, vec3_t mins, vec3_t maxs, + const byte *mod_base, const lump_t *l) { dqnode_t *in; mnode_t *out; @@ -101,6 +101,24 @@ Mod_LoadQNodes(const char *name, cplane_t *planes, int numplanes, mleaf_t *leafs *nodes = out; *numnodes = count; + /* Set initial min/max */ + if (count) + { + for (i = 0; i < 3; i++) + { + mins[i] = in->mins[i]; + maxs[i] = in->maxs[i]; + } + } + else + { + for (i = 0; i < 3; i++) + { + mins[i] = 0; + maxs[i] = 0; + } + } + for (i = 0; i < count; i++, in++, out++) { int j, planenum; @@ -109,6 +127,17 @@ Mod_LoadQNodes(const char *name, cplane_t *planes, int numplanes, mleaf_t *leafs { out->minmaxs[j] = in->mins[j]; out->minmaxs[3 + j] = in->maxs[j]; + + /* update min/max */ + if (mins[j] > in->mins[j]) + { + mins[j] = in->mins[j]; + } + + if (maxs[j] < in->maxs[j]) + { + maxs[j] = in->maxs[j]; + } } planenum = LittleLong(in->planenum) & 0xFFFFFFFF; @@ -156,8 +185,8 @@ Mod_LoadQNodes(const char *name, cplane_t *planes, int numplanes, mleaf_t *leafs void Mod_LoadQBSPNodes(const char *name, cplane_t *planes, int numplanes, mleaf_t *leafs, - int numleafs, mnode_t **nodes, int *numnodes, const byte *mod_base, - const lump_t *l, int ident) + int numleafs, mnode_t **nodes, int *numnodes, vec3_t mins, vec3_t maxs, + const byte *mod_base, const lump_t *l, int ident) { int *r_leaftovis, *r_vistoleaf; int numvisleafs; @@ -172,7 +201,7 @@ Mod_LoadQBSPNodes(const char *name, cplane_t *planes, int numplanes, mleaf_t *le } Mod_LoadQNodes(name, planes, numplanes, leafs, numleafs, nodes, numnodes, - mod_base, l); + mins, maxs, mod_base, l); Mod_SetParent(*nodes, NULL); /* sets nodes and leafs */ diff --git a/src/client/refresh/gl1/gl1_model.c b/src/client/refresh/gl1/gl1_model.c index 7b29e8c0..51c40225 100644 --- a/src/client/refresh/gl1/gl1_model.c +++ b/src/client/refresh/gl1/gl1_model.c @@ -386,8 +386,8 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen) mod->marksurfaces, mod->nummarksurfaces, &mod->numclusters, mod_base, &header->lumps[LUMP_LEAFS]); Mod_LoadQBSPNodes(mod->name, mod->planes, mod->numplanes, mod->leafs, - mod->numleafs, &mod->nodes, &mod->numnodes, mod_base, - &header->lumps[LUMP_NODES], header->ident); + mod->numleafs, &mod->nodes, &mod->numnodes, mod->mins, mod->maxs, + mod_base, &header->lumps[LUMP_NODES], header->ident); Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]); mod->numframes = 2; /* regular and alternate animation */ diff --git a/src/client/refresh/gl3/gl3_model.c b/src/client/refresh/gl3/gl3_model.c index 66ab359e..4ecd6f50 100644 --- a/src/client/refresh/gl3/gl3_model.c +++ b/src/client/refresh/gl3/gl3_model.c @@ -387,8 +387,8 @@ Mod_LoadBrushModel(gl3model_t *mod, const void *buffer, int modfilelen) mod->marksurfaces, mod->nummarksurfaces, &mod->numclusters, mod_base, &header->lumps[LUMP_LEAFS]); Mod_LoadQBSPNodes(mod->name, mod->planes, mod->numplanes, mod->leafs, - mod->numleafs, &mod->nodes, &mod->numnodes, mod_base, - &header->lumps[LUMP_NODES], header->ident); + mod->numleafs, &mod->nodes, &mod->numnodes, mod->mins, mod->maxs, + mod_base, &header->lumps[LUMP_NODES], header->ident); Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]); mod->numframes = 2; /* regular and alternate animation */ diff --git a/src/client/refresh/gl4/gl4_model.c b/src/client/refresh/gl4/gl4_model.c index e6bdfa1c..6d96508c 100644 --- a/src/client/refresh/gl4/gl4_model.c +++ b/src/client/refresh/gl4/gl4_model.c @@ -387,8 +387,8 @@ Mod_LoadBrushModel(gl4model_t *mod, const void *buffer, int modfilelen) mod->marksurfaces, mod->nummarksurfaces, &mod->numclusters, mod_base, &header->lumps[LUMP_LEAFS]); Mod_LoadQBSPNodes(mod->name, mod->planes, mod->numplanes, mod->leafs, - mod->numleafs, &mod->nodes, &mod->numnodes, mod_base, - &header->lumps[LUMP_NODES], header->ident); + mod->numleafs, &mod->nodes, &mod->numnodes, mod->mins, mod->maxs, + mod_base, &header->lumps[LUMP_NODES], header->ident); Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]); mod->numframes = 2; /* regular and alternate animation */ diff --git a/src/client/refresh/ref_shared.h b/src/client/refresh/ref_shared.h index 43b1b8cc..8ac2da8b 100644 --- a/src/client/refresh/ref_shared.h +++ b/src/client/refresh/ref_shared.h @@ -332,7 +332,7 @@ extern void Mod_LoadQBSPMarksurfaces(const char *name, msurface_t ***marksurface unsigned int *nummarksurfaces, msurface_t *surfaces, int numsurfaces, const byte *mod_base, const lump_t *lMod_LoadQBSPMarksurfaces); extern void Mod_LoadQBSPNodes(const char *name, cplane_t *planes, int numplanes, - mleaf_t *leafs, int numleafs, mnode_t **nodes, int *numnodes, + mleaf_t *leafs, int numleafs, mnode_t **nodes, int *numnodes, vec3_t mins, vec3_t maxs, const byte *mod_base, const lump_t *l, int ident); extern void Mod_LoadQBSPLeafs(const char *name, mleaf_t **leafs, int *numleafs, msurface_t **marksurfaces, unsigned int nummarksurfaces, diff --git a/src/client/refresh/soft/sw_model.c b/src/client/refresh/soft/sw_model.c index 2d0f3364..f5d19956 100644 --- a/src/client/refresh/soft/sw_model.c +++ b/src/client/refresh/soft/sw_model.c @@ -392,8 +392,8 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen) mod->marksurfaces, mod->nummarksurfaces, &mod->numclusters, mod_base, &header->lumps[LUMP_LEAFS]); Mod_LoadQBSPNodes(mod->name, mod->planes, mod->numplanes, mod->leafs, - mod->numleafs, &mod->nodes, &mod->numnodes, mod_base, - &header->lumps[LUMP_NODES], header->ident); + mod->numleafs, &mod->nodes, &mod->numnodes, mod->mins, mod->maxs, + mod_base, &header->lumps[LUMP_NODES], header->ident); Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]); mod->numframes = 2; /* regular and alternate animation */ diff --git a/src/client/refresh/vk/vk_model.c b/src/client/refresh/vk/vk_model.c index af2e4fd5..f4803f1e 100644 --- a/src/client/refresh/vk/vk_model.c +++ b/src/client/refresh/vk/vk_model.c @@ -361,8 +361,8 @@ Mod_LoadBrushModel(model_t *mod, const void *buffer, int modfilelen) mod->marksurfaces, mod->nummarksurfaces, &mod->numclusters, mod_base, &header->lumps[LUMP_LEAFS]); Mod_LoadQBSPNodes(mod->name, mod->planes, mod->numplanes, mod->leafs, - mod->numleafs, &mod->nodes, &mod->numnodes, mod_base, - &header->lumps[LUMP_NODES], header->ident); + mod->numleafs, &mod->nodes, &mod->numnodes, mod->mins, mod->maxs, + mod_base, &header->lumps[LUMP_NODES], header->ident); Mod_LoadSubmodels(mod, mod_base, &header->lumps[LUMP_MODELS]); mod->numframes = 2; /* regular and alternate animation */