qbsp: csg: re-add checking of map file order
This commit is contained in:
parent
3b348af301
commit
b04a6e9a30
|
|
@ -24,8 +24,6 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
extern int csgmergefaces;
|
|
||||||
|
|
||||||
int MakeSkipTexinfo();
|
int MakeSkipTexinfo();
|
||||||
face_t *NewFaceFromFace(const face_t *in);
|
face_t *NewFaceFromFace(const face_t *in);
|
||||||
face_t *MirrorFace(const face_t *face);
|
face_t *MirrorFace(const face_t *face);
|
||||||
|
|
|
||||||
34
qbsp/csg4.cc
34
qbsp/csg4.cc
|
|
@ -443,33 +443,35 @@ static void SaveInsideFaces(const std::list<face_t *> &faces, const brush_t &cli
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
CopyBrushFaces
|
BrushIndexInMap
|
||||||
|
|
||||||
fixme-brushbsp: remove
|
Returns the index of the brush in the .map files.
|
||||||
|
Only call with an "original" brush (from entity->brushes).
|
||||||
|
Used for clipping priority.
|
||||||
==================
|
==================
|
||||||
*/
|
*/
|
||||||
static std::list<face_t *> CopyBrushFaces(const brush_t &brush)
|
static int BrushIndexInMap(const mapentity_t *entity, const brush_t *brush)
|
||||||
{
|
{
|
||||||
std::list<face_t *> facelist;
|
Q_assert(brush >= entity->brushes.data());
|
||||||
|
Q_assert(brush < (entity->brushes.data() + entity->brushes.size()));
|
||||||
|
|
||||||
for (auto &face : brush.faces) {
|
return static_cast<int>(brush - entity->brushes.data());
|
||||||
brushfaces++;
|
|
||||||
auto *newface = new face_t(face);
|
|
||||||
newface->contents = { options.target_game->create_empty_contents(), brush.contents };
|
|
||||||
newface->lmshift = { brush.lmshift, brush.lmshift };
|
|
||||||
facelist.push_back(newface);
|
|
||||||
}
|
|
||||||
|
|
||||||
return facelist;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::list<face_t *> CSGFace_ClipAgainstSingleBrush(std::list<face_t *> input, const brush_t *srcbrush, const brush_t *clipbrush)
|
static std::list<face_t *> CSGFace_ClipAgainstSingleBrush(std::list<face_t *> input, const mapentity_t *srcentity, const brush_t *srcbrush, const brush_t *clipbrush)
|
||||||
{
|
{
|
||||||
if (srcbrush == clipbrush) {
|
if (srcbrush == clipbrush) {
|
||||||
LogPrint(" ignoring self-clip\n");
|
LogPrint(" ignoring self-clip\n");
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int srcindex = BrushIndexInMap(srcentity, srcbrush);
|
||||||
|
int clipindex = BrushIndexInMap(srcentity, clipbrush);
|
||||||
|
if (srcindex > clipindex) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::list<face_t *> inside {input};
|
std::list<face_t *> inside {input};
|
||||||
std::list<face_t *> outside;
|
std::list<face_t *> outside;
|
||||||
RemoveOutsideFaces(*clipbrush, &inside, &outside);
|
RemoveOutsideFaces(*clipbrush, &inside, &outside);
|
||||||
|
|
@ -540,7 +542,7 @@ Given `srcface`, which was produced from `srcbrush` and lies on `srcnode`:
|
||||||
Frees srcface.
|
Frees srcface.
|
||||||
==================
|
==================
|
||||||
*/
|
*/
|
||||||
std::list<face_t *> CSGFace(face_t *srcface, const mapentity_t* srcentity, const brush_t *srcbrush, const node_t *srcnode)
|
std::list<face_t *> CSGFace(face_t *srcface, const mapentity_t *srcentity, const brush_t *srcbrush, const node_t *srcnode)
|
||||||
{
|
{
|
||||||
const auto possible_clipbrushes = GatherPossibleClippingBrushes(srcentity, srcnode, srcface);
|
const auto possible_clipbrushes = GatherPossibleClippingBrushes(srcentity, srcnode, srcface);
|
||||||
|
|
||||||
|
|
@ -549,7 +551,7 @@ std::list<face_t *> CSGFace(face_t *srcface, const mapentity_t* srcentity, const
|
||||||
std::list<face_t *> result{srcface};
|
std::list<face_t *> result{srcface};
|
||||||
|
|
||||||
for (const brush_t *possible_clipbrush : possible_clipbrushes) {
|
for (const brush_t *possible_clipbrush : possible_clipbrushes) {
|
||||||
result = CSGFace_ClipAgainstSingleBrush(std::move(result), srcbrush, possible_clipbrush);
|
result = CSGFace_ClipAgainstSingleBrush(std::move(result), srcentity, srcbrush, possible_clipbrush);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
||||||
|
|
@ -231,7 +231,4 @@ void MergeAll(node_t *headnode)
|
||||||
});
|
});
|
||||||
|
|
||||||
LogPrint(LOG_STAT, " {:8} mergefaces (from {}; {:.0}% merged)\n", mergefaces, premergefaces, (static_cast<double>(mergefaces) / premergefaces) * 100.);
|
LogPrint(LOG_STAT, " {:8} mergefaces (from {}; {:.0}% merged)\n", mergefaces, premergefaces, (static_cast<double>(mergefaces) / premergefaces) * 100.);
|
||||||
|
|
||||||
// Quick hack to let solidbsp print out progress %
|
|
||||||
csgmergefaces = mergefaces;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue