From 1763928548cf464a5951fdc3ec21c504ac2ecc54 Mon Sep 17 00:00:00 2001 From: elsid Date: Sat, 27 Dec 2025 15:37:55 +0100 Subject: [PATCH] Use tile coordinates from TileCachedRecastMeshManager to schedule tile generation by navmeshtool Using a 2D range may consume a lot of memory if there is an object far from the rest. --- apps/navmeshtool/navmesh.cpp | 5 +---- apps/navmeshtool/worldspacedata.cpp | 5 +++++ apps/navmeshtool/worldspacedata.hpp | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/navmeshtool/navmesh.cpp b/apps/navmeshtool/navmesh.cpp index 9b80e894b2..6f94092344 100644 --- a/apps/navmeshtool/navmesh.cpp +++ b/apps/navmeshtool/navmesh.cpp @@ -260,10 +260,7 @@ namespace NavMeshTool if (removeUnusedTiles) navMeshTileConsumer->removeTilesOutsideRange(data.mWorldspace, range); - std::vector worldspaceTiles; - - DetourNavigator::getTilesPositions( - range, [&](const TilePosition& tilePosition) { worldspaceTiles.push_back(tilePosition); }); + std::vector worldspaceTiles = data.mTiles; { const std::size_t tiles = worldspaceTiles.size(); diff --git a/apps/navmeshtool/worldspacedata.cpp b/apps/navmeshtool/worldspacedata.cpp index 12ed47a333..f6da9082aa 100644 --- a/apps/navmeshtool/worldspacedata.cpp +++ b/apps/navmeshtool/worldspacedata.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include #include @@ -371,6 +372,10 @@ namespace NavMeshTool << (data.mObjects.size() - cellObjectsBegin) << " objects"; } + const std::map changedTiles = manager.takeChangedTiles(guard.get()); + data.mTiles.reserve(changedTiles.size()); + std::ranges::transform(changedTiles, std::back_inserter(data.mTiles), [](const auto& v) { return v.first; }); + Log(Debug::Info) << "Processed " << cells.size() << " cells, added " << data.mObjects.size() << " objects and " << data.mHeightfields.size() << " height fields"; diff --git a/apps/navmeshtool/worldspacedata.hpp b/apps/navmeshtool/worldspacedata.hpp index 858cb42e7a..3184089c28 100644 --- a/apps/navmeshtool/worldspacedata.hpp +++ b/apps/navmeshtool/worldspacedata.hpp @@ -77,6 +77,7 @@ namespace NavMeshTool std::unique_ptr mTileCachedRecastMeshManager; btAABB mAabb; bool mAabbInitialized = false; + std::vector mTiles; std::vector mObjects; std::vector> mLandData; std::vector> mHeightfields;