diff --git a/cache/wmo_floor_cache.bin b/cache/wmo_floor_cache.bin new file mode 100644 index 00000000..f5ded321 Binary files /dev/null and b/cache/wmo_floor_cache.bin differ diff --git a/src/core/application.cpp b/src/core/application.cpp index 0e696cca..18adb956 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -317,7 +317,11 @@ void Application::shutdown() { // Save floor cache before renderer is destroyed if (renderer && renderer->getWMORenderer()) { - renderer->getWMORenderer()->saveFloorCache("cache/wmo_floor_cache.bin"); + size_t cacheSize = renderer->getWMORenderer()->getFloorCacheSize(); + if (cacheSize > 0) { + LOG_INFO("Saving WMO floor cache (", cacheSize, " entries)..."); + renderer->getWMORenderer()->saveFloorCache("cache/wmo_floor_cache.bin"); + } } // Stop renderer first: terrain streaming workers may still be reading via diff --git a/src/rendering/wmo_renderer.cpp b/src/rendering/wmo_renderer.cpp index 0e59109b..bab6553c 100644 --- a/src/rendering/wmo_renderer.cpp +++ b/src/rendering/wmo_renderer.cpp @@ -517,8 +517,15 @@ void WMORenderer::resetQueryStats() { bool WMORenderer::saveFloorCache(const std::string& filepath) const { // Create directory if needed std::filesystem::path path(filepath); + std::filesystem::path absPath = std::filesystem::absolute(path); + core::Logger::getInstance().info("Saving floor cache to: ", absPath.string()); + if (path.has_parent_path()) { - std::filesystem::create_directories(path.parent_path()); + std::error_code ec; + std::filesystem::create_directories(path.parent_path(), ec); + if (ec) { + core::Logger::getInstance().error("Failed to create cache directory: ", ec.message()); + } } std::ofstream file(filepath, std::ios::binary);