qbsp: refactor plane lump writing
This commit is contained in:
parent
460428d099
commit
24fc2ffc6a
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -25,8 +25,6 @@
|
|||
int ExportMapPlane(int planenum);
|
||||
int ExportMapTexinfo(int texinfonum);
|
||||
|
||||
void AllocBSPPlanes();
|
||||
|
||||
void BeginBSPFile(void);
|
||||
void FinishBSPFile(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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<int>(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();
|
||||
|
|
|
|||
Loading…
Reference in New Issue