1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-06 10:45:31 +00:00

Allow to interrupt terrain preloading

This commit is contained in:
Andrei Kortunov 2019-03-09 13:13:39 +04:00
parent b214c54b3a
commit 12f9184d00
4 changed files with 6 additions and 5 deletions

View file

@ -381,7 +381,7 @@ namespace MWWorld
{ {
for (unsigned int i=0; i<mTerrainViews.size() && i<mPreloadPositions.size() && !mAbort; ++i) for (unsigned int i=0; i<mTerrainViews.size() && i<mPreloadPositions.size() && !mAbort; ++i)
{ {
mWorld->preload(mTerrainViews[i], mPreloadPositions[i]); mWorld->preload(mTerrainViews[i], mPreloadPositions[i], mAbort);
mTerrainViews[i]->reset(0); mTerrainViews[i]->reset(0);
} }
} }

View file

@ -478,14 +478,14 @@ View* QuadTreeWorld::createView()
return new ViewData; return new ViewData;
} }
void QuadTreeWorld::preload(View *view, const osg::Vec3f &eyePoint) void QuadTreeWorld::preload(View *view, const osg::Vec3f &eyePoint, std::atomic<bool> &abort)
{ {
ensureQuadTreeBuilt(); ensureQuadTreeBuilt();
ViewData* vd = static_cast<ViewData*>(view); ViewData* vd = static_cast<ViewData*>(view);
traverse(mRootNode.get(), vd, nullptr, mRootNode->getLodCallback(), eyePoint, false); traverse(mRootNode.get(), vd, nullptr, mRootNode->getLodCallback(), eyePoint, false);
for (unsigned int i=0; i<vd->getNumEntries(); ++i) for (unsigned int i=0; i<vd->getNumEntries() && !abort; ++i)
{ {
ViewData::Entry& entry = vd->getEntry(i); ViewData::Entry& entry = vd->getEntry(i);
loadRenderingNode(entry, vd, mVertexLodMod, mChunkManager.get()); loadRenderingNode(entry, vd, mVertexLodMod, mChunkManager.get());

View file

@ -30,7 +30,7 @@ namespace Terrain
void cacheCell(View *view, int x, int y); void cacheCell(View *view, int x, int y);
View* createView(); View* createView();
void preload(View* view, const osg::Vec3f& eyePoint); void preload(View* view, const osg::Vec3f& eyePoint, std::atomic<bool>& abort);
void reportStats(unsigned int frameNumber, osg::Stats* stats); void reportStats(unsigned int frameNumber, osg::Stats* stats);

View file

@ -5,6 +5,7 @@
#include <osg/Referenced> #include <osg/Referenced>
#include <osg/Vec3f> #include <osg/Vec3f>
#include <atomic>
#include <memory> #include <memory>
#include <set> #include <set>
@ -93,7 +94,7 @@ namespace Terrain
virtual View* createView() { return nullptr; } virtual View* createView() { return nullptr; }
/// @note Thread safe, as long as you do not attempt to load into the same view from multiple threads. /// @note Thread safe, as long as you do not attempt to load into the same view from multiple threads.
virtual void preload(View* view, const osg::Vec3f& eyePoint) {} virtual void preload(View* view, const osg::Vec3f& eyePoint, std::atomic<bool>& abort) {}
virtual void reportStats(unsigned int frameNumber, osg::Stats* stats) {} virtual void reportStats(unsigned int frameNumber, osg::Stats* stats) {}