forked from mirror/openmw-tes3mp
Move the deletion of PreloadItem to the worker thread
This commit is contained in:
parent
a1069dce3c
commit
eaeba4138b
3 changed files with 24 additions and 1 deletions
|
@ -9,6 +9,7 @@
|
||||||
#include <components/misc/resourcehelpers.hpp>
|
#include <components/misc/resourcehelpers.hpp>
|
||||||
#include <components/nifosg/nifloader.hpp>
|
#include <components/nifosg/nifloader.hpp>
|
||||||
#include <components/terrain/world.hpp>
|
#include <components/terrain/world.hpp>
|
||||||
|
#include <components/sceneutil/unrefqueue.hpp>
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/world.hpp"
|
#include "../mwbase/world.hpp"
|
||||||
|
@ -240,7 +241,15 @@ namespace MWWorld
|
||||||
|
|
||||||
void CellPreloader::notifyLoaded(CellStore *cell)
|
void CellPreloader::notifyLoaded(CellStore *cell)
|
||||||
{
|
{
|
||||||
mPreloadCells.erase(cell);
|
PreloadMap::iterator found = mPreloadCells.find(cell);
|
||||||
|
if (found != mPreloadCells.end())
|
||||||
|
{
|
||||||
|
// do the deletion in the background thread
|
||||||
|
if (found->second.mWorkItem)
|
||||||
|
mUnrefQueue->push(mPreloadCells[cell].mWorkItem);
|
||||||
|
|
||||||
|
mPreloadCells.erase(found);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CellPreloader::updateCache(double timestamp)
|
void CellPreloader::updateCache(double timestamp)
|
||||||
|
@ -291,4 +300,9 @@ namespace MWWorld
|
||||||
mWorkQueue = workQueue;
|
mWorkQueue = workQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CellPreloader::setUnrefQueue(SceneUtil::UnrefQueue* unrefQueue)
|
||||||
|
{
|
||||||
|
mUnrefQueue = unrefQueue;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,11 @@ namespace Terrain
|
||||||
class World;
|
class World;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace SceneUtil
|
||||||
|
{
|
||||||
|
class UnrefQueue;
|
||||||
|
}
|
||||||
|
|
||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
{
|
{
|
||||||
class CellStore;
|
class CellStore;
|
||||||
|
@ -51,11 +56,14 @@ namespace MWWorld
|
||||||
|
|
||||||
void setWorkQueue(osg::ref_ptr<SceneUtil::WorkQueue> workQueue);
|
void setWorkQueue(osg::ref_ptr<SceneUtil::WorkQueue> workQueue);
|
||||||
|
|
||||||
|
void setUnrefQueue(SceneUtil::UnrefQueue* unrefQueue);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Resource::ResourceSystem* mResourceSystem;
|
Resource::ResourceSystem* mResourceSystem;
|
||||||
Resource::BulletShapeManager* mBulletShapeManager;
|
Resource::BulletShapeManager* mBulletShapeManager;
|
||||||
Terrain::World* mTerrain;
|
Terrain::World* mTerrain;
|
||||||
osg::ref_ptr<SceneUtil::WorkQueue> mWorkQueue;
|
osg::ref_ptr<SceneUtil::WorkQueue> mWorkQueue;
|
||||||
|
osg::ref_ptr<SceneUtil::UnrefQueue> mUnrefQueue;
|
||||||
double mExpiryDelay;
|
double mExpiryDelay;
|
||||||
unsigned int mMinCacheSize;
|
unsigned int mMinCacheSize;
|
||||||
unsigned int mMaxCacheSize;
|
unsigned int mMaxCacheSize;
|
||||||
|
|
|
@ -471,6 +471,7 @@ namespace MWWorld
|
||||||
mPreloader.reset(new CellPreloader(rendering.getResourceSystem(), physics->getShapeManager(), rendering.getTerrain()));
|
mPreloader.reset(new CellPreloader(rendering.getResourceSystem(), physics->getShapeManager(), rendering.getTerrain()));
|
||||||
mPreloader->setWorkQueue(mRendering.getWorkQueue());
|
mPreloader->setWorkQueue(mRendering.getWorkQueue());
|
||||||
|
|
||||||
|
mPreloader->setUnrefQueue(rendering.getUnrefQueue());
|
||||||
mPhysics->setUnrefQueue(rendering.getUnrefQueue());
|
mPhysics->setUnrefQueue(rendering.getUnrefQueue());
|
||||||
|
|
||||||
rendering.getResourceSystem()->setExpiryDelay(Settings::Manager::getFloat("cache expiry delay", "Cells"));
|
rendering.getResourceSystem()->setExpiryDelay(Settings::Manager::getFloat("cache expiry delay", "Cells"));
|
||||||
|
|
Loading…
Reference in a new issue