qbsp: refactor plane lump writing

This commit is contained in:
Eric Wasylishen 2021-08-22 20:06:03 -06:00
parent 460428d099
commit 24fc2ffc6a
5 changed files with 7 additions and 47 deletions

View File

@ -155,6 +155,7 @@ typedef struct mapdata_s {
// Final, exported data
std::vector<texinfo_t> exported_texinfos; // FIXME: change to gtexinfo_t
std::vector<dplane_t> exported_planes;
// helpers
std::string texinfoTextureName(int texinfo) const {

View File

@ -25,8 +25,6 @@
int ExportMapPlane(int planenum);
int ExportMapTexinfo(int texinfonum);
void AllocBSPPlanes();
void BeginBSPFile(void);
void FinishBSPFile(void);

View File

@ -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<int>(map.exported_planes.size()), static_cast<int>(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<int>(map.exported_texinfos.size()), static_cast<int>(map.exported_texinfos.size()) * MemSize[BSP_TEXINFO]);

View File

@ -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);

View File

@ -72,25 +72,16 @@ ExportMapPlane(int planenum)
if (plane->outputplanenum != -1)
return plane->outputplanenum; // already output.
struct lumpdata *planes = &pWorldEnt()->lumps[LUMP_PLANES];
const int newIndex = static_cast<int>(map.exported_planes.size());
map.exported_planes.push_back({});
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];
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();