From 3572edab72d3b9b2a534afd657be02fd93522038 Mon Sep 17 00:00:00 2001 From: elsid Date: Sun, 20 Jan 2019 19:27:52 +0300 Subject: [PATCH 1/2] Update navmesh in a separate method --- apps/openmw/mwrender/renderingmanager.cpp | 48 +++++++++++++---------- apps/openmw/mwrender/renderingmanager.hpp | 2 + 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 4d79fd3de2..693491efea 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -599,28 +599,8 @@ namespace MWRender mWater->update(dt); } - const auto navMeshes = mNavigator.getNavMeshes(); + updateNavMesh(); - auto it = navMeshes.begin(); - for (std::size_t i = 0; it != navMeshes.end() && i < mNavMeshNumber; ++i) - ++it; - if (it == navMeshes.end()) - { - mNavMesh->reset(); - } - else - { - try - { - const auto locked = it->second.lockConst(); - mNavMesh->update(locked->getValue(), mNavMeshNumber, locked->getGeneration(), - locked->getNavMeshRevision(), mNavigator.getSettings()); - } - catch (const std::exception& e) - { - Log(Debug::Error) << "NavMesh render update exception: " << e.what(); - } - } mCamera->update(dt, paused); osg::Vec3f focal, cameraPos; @@ -1402,4 +1382,30 @@ namespace MWRender { mNavMeshNumber = value; } + + void RenderingManager::updateNavMesh() + { + const auto navMeshes = mNavigator.getNavMeshes(); + + auto it = navMeshes.begin(); + for (std::size_t i = 0; it != navMeshes.end() && i < mNavMeshNumber; ++i) + ++it; + if (it == navMeshes.end()) + { + mNavMesh->reset(); + } + else + { + try + { + const auto locked = it->second.lockConst(); + mNavMesh->update(locked->getValue(), mNavMeshNumber, locked->getGeneration(), + locked->getNavMeshRevision(), mNavigator.getSettings()); + } + catch (const std::exception& e) + { + Log(Debug::Error) << "NavMesh render update exception: " << e.what(); + } + } + } } diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 7a4500ac90..2a48097bd8 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -240,6 +240,8 @@ namespace MWRender void renderCameraToImage(osg::Camera *camera, osg::Image *image, int w, int h); + void updateNavMesh(); + osg::ref_ptr getIntersectionVisitor(osgUtil::Intersector* intersector, bool ignorePlayer, bool ignoreActors); osg::ref_ptr mIntersectionVisitor; From 13e94ab19452f2de53c4dbf5e7e92a2d0e5e04b6 Mon Sep 17 00:00:00 2001 From: elsid Date: Sun, 20 Jan 2019 19:30:26 +0300 Subject: [PATCH 2/2] Get navmesh to update osg node only if rendering is enabled --- apps/openmw/mwrender/navmesh.hpp | 5 +++++ apps/openmw/mwrender/renderingmanager.cpp | 3 +++ 2 files changed, 8 insertions(+) diff --git a/apps/openmw/mwrender/navmesh.hpp b/apps/openmw/mwrender/navmesh.hpp index 29205ca277..d329b895d7 100644 --- a/apps/openmw/mwrender/navmesh.hpp +++ b/apps/openmw/mwrender/navmesh.hpp @@ -30,6 +30,11 @@ namespace MWRender void disable(); + bool isEnabled() const + { + return mEnabled; + } + private: osg::ref_ptr mRootNode; bool mEnabled; diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 693491efea..322c310a21 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -1385,6 +1385,9 @@ namespace MWRender void RenderingManager::updateNavMesh() { + if (!mNavMesh->isEnabled()) + return; + const auto navMeshes = mNavigator.getNavMeshes(); auto it = navMeshes.begin();