From d2cfc0d025d6680ed217d9fb2ee1971a36946ffe Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 8 Aug 2022 01:01:49 -0400 Subject: [PATCH] use planenum in SplitBrush and friends --- qbsp/brushbsp.cc | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/qbsp/brushbsp.cc b/qbsp/brushbsp.cc index 9ac70aec..169fc3f6 100644 --- a/qbsp/brushbsp.cc +++ b/qbsp/brushbsp.cc @@ -431,8 +431,9 @@ input. https://github.com/id-Software/Quake-2-Tools/blob/master/bsp/qbsp3/brushbsp.c#L935 ================ */ -static twosided> SplitBrush(std::unique_ptr brush, const qplane3d &split, bspstats_t &stats) +static twosided> SplitBrush(std::unique_ptr brush, size_t planenum, bspstats_t &stats) { + const qplane3d &split = map.planes[planenum]; twosided> result; // check all points @@ -565,7 +566,7 @@ static twosided> SplitBrush(std::unique_ptrvolume->copy_unique(), plane, stats); + auto [front, back] = SplitBrush(node->volume->copy_unique(), planenum, stats); bool good = (front && back); @@ -705,9 +706,10 @@ static std::optional ChooseMidPlaneFromList(const std::vector SelectSplitPlane(const std::vector>, 2> SplitBrushList( - std::vector> brushes, const qbsp_plane_t &plane, bspstats_t &stats) + std::vector> brushes, size_t planenum, bspstats_t &stats) { std::array>, 2> result; @@ -928,7 +930,7 @@ static std::array>, 2> SplitBrushList( if (sides == PSIDE_BOTH) { // split into two brushes (destructively) - auto [front, back] = SplitBrush(std::move(brush), plane, stats); + auto [front, back] = SplitBrush(std::move(brush), planenum, stats); if (front) { result[0].push_back(std::move(front)); @@ -945,7 +947,7 @@ static std::array>, 2> SplitBrushList( // as a splitter again if (sides & PSIDE_FACING) { for (auto &side : brush->sides) { - if (qv::epsilonEqual(side.get_positive_plane(), plane)) { + if ((side.planenum & ~1) == planenum) { side.onnode = true; } } @@ -995,7 +997,7 @@ static void BuildTree_r(node_t *node, std::vector> b node->planenum = bestplane.value(); auto &plane = map.get_plane(bestplane.value()); - auto children = SplitBrushList(std::move(brushes), plane, stats); + auto children = SplitBrushList(std::move(brushes), bestplane.value(), stats); // allocate children before recursing for (int i = 0; i < 2; i++) { @@ -1012,7 +1014,7 @@ static void BuildTree_r(node_t *node, std::vector> b } } - auto children_volumes = SplitBrush(node->volume->copy_unique(), plane, stats); + auto children_volumes = SplitBrush(node->volume->copy_unique(), bestplane.value(), stats); node->children[0]->volume = std::move(children_volumes[0]); node->children[1]->volume = std::move(children_volumes[1]);