go back to vector for brush lists
This commit is contained in:
parent
b37917c9ca
commit
697e3325f8
|
|
@ -666,8 +666,8 @@ struct node_t
|
|||
uint32_t firstleafbrush; // Q2
|
||||
uint32_t numleafbrushes;
|
||||
int32_t area;
|
||||
std::set<bspbrush_t *, bspbrush_t_less> original_brushes; // FIXME: only valid during construction
|
||||
std::unordered_set<const mapbrush_t *> original_mapbrushes;
|
||||
std::vector<bspbrush_t *> original_brushes; // FIXME: only valid during construction
|
||||
std::vector<const mapbrush_t *> original_mapbrushes;
|
||||
};
|
||||
|
||||
void InitQBSP(int argc, const char **argv);
|
||||
|
|
|
|||
|
|
@ -388,8 +388,7 @@ static void LeafNode(node_t *leafnode, std::vector<std::unique_ptr<bspbrush_t>>
|
|||
}
|
||||
for (auto &brush : brushes) {
|
||||
Q_assert(brush->original != nullptr);
|
||||
leafnode->original_brushes.insert(brush->original);
|
||||
leafnode->original_mapbrushes.insert(brush->original->mapbrush);
|
||||
leafnode->original_brushes.push_back(brush->original);
|
||||
}
|
||||
|
||||
qbsp_options.target_game->count_contents_in_stats(leafnode->contents, *stats.leafstats);
|
||||
|
|
|
|||
21
qbsp/tree.cc
21
qbsp/tree.cc
|
|
@ -78,10 +78,24 @@ void FreeTreePortals(tree_t *tree)
|
|||
static void ConvertNodeToLeaf(node_t *node, const contentflags_t &contents)
|
||||
{
|
||||
// merge the children's brush lists
|
||||
node->original_mapbrushes = node->children[0]->original_mapbrushes;
|
||||
node->original_mapbrushes.insert(node->children[1]->original_mapbrushes.begin(), node->children[1]->original_mapbrushes.end());
|
||||
node->original_brushes = std::move(node->children[0]->original_brushes);
|
||||
node->original_brushes.insert(node->original_brushes.end(), node->children[1]->original_brushes.begin(), node->children[1]->original_brushes.end());
|
||||
|
||||
node->original_brushes.clear();
|
||||
if (node->original_brushes.size()) {
|
||||
std::sort(node->original_brushes.begin(), node->original_brushes.end(), bspbrush_t_less());
|
||||
auto unique_begin = std::unique(node->original_brushes.begin(), node->original_brushes.end());
|
||||
node->original_brushes.erase(unique_begin, node->original_brushes.end());
|
||||
|
||||
// migrate it over to mapbrushes
|
||||
node->original_mapbrushes.reserve(node->original_brushes.size());
|
||||
|
||||
for (auto &b : node->original_brushes) {
|
||||
node->original_mapbrushes.push_back(b->mapbrush);
|
||||
}
|
||||
|
||||
// clear original_brushes since we no longer need it
|
||||
node->original_brushes.clear();
|
||||
}
|
||||
|
||||
node->is_leaf = true;
|
||||
|
||||
|
|
@ -99,7 +113,6 @@ static void ConvertNodeToLeaf(node_t *node, const contentflags_t &contents)
|
|||
static void PruneNodes_R(node_t *node, std::atomic<int32_t> &count_pruned)
|
||||
{
|
||||
if (node->is_leaf) {
|
||||
node->original_brushes.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue