From 24fc2ffc6a7a8adeffb048418461597bc2d88fbc Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Sun, 22 Aug 2021 20:06:03 -0600 Subject: [PATCH] qbsp: refactor plane lump writing --- include/qbsp/map.hh | 1 + include/qbsp/writebsp.hh | 2 -- qbsp/bspfile.cc | 4 ++-- qbsp/qbsp.cc | 3 --- qbsp/writebsp.cc | 44 ++++------------------------------------ 5 files changed, 7 insertions(+), 47 deletions(-) diff --git a/include/qbsp/map.hh b/include/qbsp/map.hh index c3b02bb0..153bcb8b 100644 --- a/include/qbsp/map.hh +++ b/include/qbsp/map.hh @@ -155,6 +155,7 @@ typedef struct mapdata_s { // Final, exported data std::vector exported_texinfos; // FIXME: change to gtexinfo_t + std::vector exported_planes; // helpers std::string texinfoTextureName(int texinfo) const { diff --git a/include/qbsp/writebsp.hh b/include/qbsp/writebsp.hh index d964837d..90ee1474 100644 --- a/include/qbsp/writebsp.hh +++ b/include/qbsp/writebsp.hh @@ -25,8 +25,6 @@ int ExportMapPlane(int planenum); int ExportMapTexinfo(int texinfonum); -void AllocBSPPlanes(); - void BeginBSPFile(void); void FinishBSPFile(void); diff --git a/qbsp/bspfile.cc b/qbsp/bspfile.cc index 4d53be6d..d9f335b4 100644 --- a/qbsp/bspfile.cc +++ b/qbsp/bspfile.cc @@ -293,7 +293,7 @@ WriteBSPFile(void) if (ret != 1) Error("Failure writing to file"); - AddLump(f, LUMP_PLANES); + AddLumpFromBuffer(f, LUMP_PLANES, map.exported_planes.data(), map.exported_planes.size() * sizeof(map.exported_planes[0])); AddLump(f, LUMP_LEAFS); AddLump(f, LUMP_VERTEXES); AddLump(f, LUMP_NODES); @@ -381,7 +381,7 @@ PrintBSPFileSizes(void) { struct lumpdata *lump; - Message(msgStat, "%8d planes %10d", map.cTotal[LUMP_PLANES], map.cTotal[LUMP_PLANES] * MemSize[BSP_PLANE]); + Message(msgStat, "%8d planes %10d", static_cast(map.exported_planes.size()), static_cast(map.exported_planes.size()) * MemSize[BSP_PLANE]); Message(msgStat, "%8d vertexes %10d", map.cTotal[LUMP_VERTEXES], map.cTotal[LUMP_VERTEXES] * MemSize[BSP_VERTEX]); Message(msgStat, "%8d nodes %10d", map.cTotal[LUMP_NODES], map.cTotal[LUMP_NODES] * MemSize[BSP_NODE]); Message(msgStat, "%8d texinfo %10d", static_cast(map.exported_texinfos.size()), static_cast(map.exported_texinfos.size()) * MemSize[BSP_TEXINFO]); diff --git a/qbsp/qbsp.cc b/qbsp/qbsp.cc index 046dfdea..e28b9efa 100644 --- a/qbsp/qbsp.cc +++ b/qbsp/qbsp.cc @@ -178,7 +178,6 @@ ProcessEntity(mapentity_t *entity, const int hullnum) DetailToSolid(nodes); } } - AllocBSPPlanes(); ExportClipNodes(entity, nodes, hullnum); } else { /* @@ -233,8 +232,6 @@ ProcessEntity(mapentity_t *entity, const int hullnum) // convert detail leafs to solid (in case we didn't make the call above) DetailToSolid(nodes); - AllocBSPPlanes(); - if (options.fObjExport && entity == pWorldEnt()) { ExportObj_Nodes("pre_makefaceedges_plane_faces", nodes); ExportObj_Marksurfaces("pre_makefaceedges_marksurfaces", nodes); diff --git a/qbsp/writebsp.cc b/qbsp/writebsp.cc index 51bff209..118c8712 100644 --- a/qbsp/writebsp.cc +++ b/qbsp/writebsp.cc @@ -72,25 +72,16 @@ ExportMapPlane(int planenum) if (plane->outputplanenum != -1) return plane->outputplanenum; // already output. - struct lumpdata *planes = &pWorldEnt()->lumps[LUMP_PLANES]; - - if (planes->index >= planes->count) - Error("Internal error: plane count mismatch (%s)", __func__); - - const int newIndex = planes->index; - - dplane_t *dplane = &((dplane_t *)planes->data)[newIndex]; + const int newIndex = static_cast(map.exported_planes.size()); + map.exported_planes.push_back({}); + + dplane_t *dplane = &map.exported_planes.back(); dplane->normal[0] = plane->normal[0]; dplane->normal[1] = plane->normal[1]; dplane->normal[2] = plane->normal[2]; dplane->dist = plane->dist; dplane->type = plane->type; - planes->index++; - map.cTotal[LUMP_PLANES]++; - - Q_assert(planes->index == map.cTotal[LUMP_PLANES]); - plane->outputplanenum = newIndex; return newIndex; } @@ -121,29 +112,6 @@ ExportMapTexinfo(int texinfonum) return i; } -/* -================== -AllocBSPPlanes -================== -*/ -void -AllocBSPPlanes() -{ - struct lumpdata *planes = &pWorldEnt()->lumps[LUMP_PLANES]; - - // OK just need one plane array, stick it in worldmodel - if (map.numplanes() > planes->count) { - int newcount = map.numplanes(); - struct lumpdata *newplanes = (struct lumpdata *)AllocMem(BSP_PLANE, newcount, true); - - memcpy(newplanes, planes->data, MemSize[BSP_PLANE] * planes->count); - FreeMem(planes->data, BSP_PLANE, planes->count); - - planes->count = newcount; - planes->data = newplanes; - } -} - //=========================================================================== @@ -822,10 +790,6 @@ FinishBSPFile(void) options.fVerbose = true; Message(msgProgress, "WriteBSPFile"); - // TODO: Fix this somewhere else? - struct lumpdata *planes = &pWorldEnt()->lumps[LUMP_PLANES]; - planes->count = map.cTotal[LUMP_PLANES]; - WriteExtendedTexinfoFlags(); WriteBSPFile(); PrintBSPFileSizes();