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
|
// Final, exported data
|
||||||
std::vector<texinfo_t> exported_texinfos; // FIXME: change to gtexinfo_t
|
std::vector<texinfo_t> exported_texinfos; // FIXME: change to gtexinfo_t
|
||||||
|
std::vector<dplane_t> exported_planes;
|
||||||
|
|
||||||
// helpers
|
// helpers
|
||||||
std::string texinfoTextureName(int texinfo) const {
|
std::string texinfoTextureName(int texinfo) const {
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,6 @@
|
||||||
int ExportMapPlane(int planenum);
|
int ExportMapPlane(int planenum);
|
||||||
int ExportMapTexinfo(int texinfonum);
|
int ExportMapTexinfo(int texinfonum);
|
||||||
|
|
||||||
void AllocBSPPlanes();
|
|
||||||
|
|
||||||
void BeginBSPFile(void);
|
void BeginBSPFile(void);
|
||||||
void FinishBSPFile(void);
|
void FinishBSPFile(void);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -293,7 +293,7 @@ WriteBSPFile(void)
|
||||||
if (ret != 1)
|
if (ret != 1)
|
||||||
Error("Failure writing to file");
|
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_LEAFS);
|
||||||
AddLump(f, LUMP_VERTEXES);
|
AddLump(f, LUMP_VERTEXES);
|
||||||
AddLump(f, LUMP_NODES);
|
AddLump(f, LUMP_NODES);
|
||||||
|
|
@ -381,7 +381,7 @@ PrintBSPFileSizes(void)
|
||||||
{
|
{
|
||||||
struct lumpdata *lump;
|
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 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 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]);
|
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);
|
DetailToSolid(nodes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AllocBSPPlanes();
|
|
||||||
ExportClipNodes(entity, nodes, hullnum);
|
ExportClipNodes(entity, nodes, hullnum);
|
||||||
} else {
|
} 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)
|
// convert detail leafs to solid (in case we didn't make the call above)
|
||||||
DetailToSolid(nodes);
|
DetailToSolid(nodes);
|
||||||
|
|
||||||
AllocBSPPlanes();
|
|
||||||
|
|
||||||
if (options.fObjExport && entity == pWorldEnt()) {
|
if (options.fObjExport && entity == pWorldEnt()) {
|
||||||
ExportObj_Nodes("pre_makefaceedges_plane_faces", nodes);
|
ExportObj_Nodes("pre_makefaceedges_plane_faces", nodes);
|
||||||
ExportObj_Marksurfaces("pre_makefaceedges_marksurfaces", nodes);
|
ExportObj_Marksurfaces("pre_makefaceedges_marksurfaces", nodes);
|
||||||
|
|
|
||||||
|
|
@ -72,25 +72,16 @@ ExportMapPlane(int planenum)
|
||||||
if (plane->outputplanenum != -1)
|
if (plane->outputplanenum != -1)
|
||||||
return plane->outputplanenum; // already output.
|
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__);
|
dplane_t *dplane = &map.exported_planes.back();
|
||||||
|
|
||||||
const int newIndex = planes->index;
|
|
||||||
|
|
||||||
dplane_t *dplane = &((dplane_t *)planes->data)[newIndex];
|
|
||||||
dplane->normal[0] = plane->normal[0];
|
dplane->normal[0] = plane->normal[0];
|
||||||
dplane->normal[1] = plane->normal[1];
|
dplane->normal[1] = plane->normal[1];
|
||||||
dplane->normal[2] = plane->normal[2];
|
dplane->normal[2] = plane->normal[2];
|
||||||
dplane->dist = plane->dist;
|
dplane->dist = plane->dist;
|
||||||
dplane->type = plane->type;
|
dplane->type = plane->type;
|
||||||
|
|
||||||
planes->index++;
|
|
||||||
map.cTotal[LUMP_PLANES]++;
|
|
||||||
|
|
||||||
Q_assert(planes->index == map.cTotal[LUMP_PLANES]);
|
|
||||||
|
|
||||||
plane->outputplanenum = newIndex;
|
plane->outputplanenum = newIndex;
|
||||||
return newIndex;
|
return newIndex;
|
||||||
}
|
}
|
||||||
|
|
@ -121,29 +112,6 @@ ExportMapTexinfo(int texinfonum)
|
||||||
return i;
|
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;
|
options.fVerbose = true;
|
||||||
Message(msgProgress, "WriteBSPFile");
|
Message(msgProgress, "WriteBSPFile");
|
||||||
|
|
||||||
// TODO: Fix this somewhere else?
|
|
||||||
struct lumpdata *planes = &pWorldEnt()->lumps[LUMP_PLANES];
|
|
||||||
planes->count = map.cTotal[LUMP_PLANES];
|
|
||||||
|
|
||||||
WriteExtendedTexinfoFlags();
|
WriteExtendedTexinfoFlags();
|
||||||
WriteBSPFile();
|
WriteBSPFile();
|
||||||
PrintBSPFileSizes();
|
PrintBSPFileSizes();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue