forked from teamnwah/openmw-tes3coop
Remove non required use of WorkQueue
This commit is contained in:
parent
19d516cbda
commit
1c15686353
3 changed files with 17 additions and 43 deletions
|
@ -219,7 +219,7 @@ namespace MWRender
|
||||||
Settings::Manager::getBool("auto use terrain specular maps", "Shaders"));
|
Settings::Manager::getBool("auto use terrain specular maps", "Shaders"));
|
||||||
|
|
||||||
if (distantTerrain)
|
if (distantTerrain)
|
||||||
mTerrain.reset(new Terrain::QuadTreeWorld(mWorkQueue.get(), sceneRoot, mRootNode, mResourceSystem, mTerrainStorage, Mask_Terrain, Mask_PreCompile));
|
mTerrain.reset(new Terrain::QuadTreeWorld(sceneRoot, mRootNode, mResourceSystem, mTerrainStorage, Mask_Terrain, Mask_PreCompile));
|
||||||
else
|
else
|
||||||
mTerrain.reset(new Terrain::TerrainGrid(sceneRoot, mRootNode, mResourceSystem, mTerrainStorage, Mask_Terrain, Mask_PreCompile));
|
mTerrain.reset(new Terrain::TerrainGrid(sceneRoot, mRootNode, mResourceSystem, mTerrainStorage, Mask_Terrain, Mask_PreCompile));
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
|
|
||||||
#include <osgUtil/CullVisitor>
|
#include <osgUtil/CullVisitor>
|
||||||
|
|
||||||
#include <components/sceneutil/workqueue.hpp>
|
|
||||||
|
|
||||||
#include "quadtreenode.hpp"
|
#include "quadtreenode.hpp"
|
||||||
#include "storage.hpp"
|
#include "storage.hpp"
|
||||||
#include "viewdata.hpp"
|
#include "viewdata.hpp"
|
||||||
|
@ -109,10 +107,10 @@ private:
|
||||||
QuadTreeWorld* mWorld;
|
QuadTreeWorld* mWorld;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BuildQuadTreeItem : public SceneUtil::WorkItem
|
class QuadTreeBuilder
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BuildQuadTreeItem(Terrain::Storage* storage, ViewDataMap* viewDataMap, float minSize)
|
QuadTreeBuilder(Terrain::Storage* storage, ViewDataMap* viewDataMap, float minSize)
|
||||||
: mStorage(storage)
|
: mStorage(storage)
|
||||||
, mMinX(0.f), mMaxX(0.f), mMinY(0.f), mMaxY(0.f)
|
, mMinX(0.f), mMaxX(0.f), mMinY(0.f), mMaxY(0.f)
|
||||||
, mMinSize(minSize)
|
, mMinSize(minSize)
|
||||||
|
@ -120,7 +118,7 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void doWork()
|
void build()
|
||||||
{
|
{
|
||||||
mStorage->getBounds(mMinX, mMaxX, mMinY, mMaxY);
|
mStorage->getBounds(mMinX, mMaxX, mMinY, mMaxY);
|
||||||
|
|
||||||
|
@ -226,9 +224,8 @@ private:
|
||||||
osg::ref_ptr<RootNode> mRootNode;
|
osg::ref_ptr<RootNode> mRootNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
QuadTreeWorld::QuadTreeWorld(SceneUtil::WorkQueue* workQueue, osg::Group *parent, osg::Group *compileRoot, Resource::ResourceSystem *resourceSystem, Storage *storage, int nodeMask, int preCompileMask)
|
QuadTreeWorld::QuadTreeWorld(osg::Group *parent, osg::Group *compileRoot, Resource::ResourceSystem *resourceSystem, Storage *storage, int nodeMask, int preCompileMask)
|
||||||
: World(parent, compileRoot, resourceSystem, storage, nodeMask, preCompileMask)
|
: World(parent, compileRoot, resourceSystem, storage, nodeMask, preCompileMask)
|
||||||
, mWorkQueue(workQueue)
|
|
||||||
, mViewDataMap(new ViewDataMap)
|
, mViewDataMap(new ViewDataMap)
|
||||||
, mQuadTreeBuilt(false)
|
, mQuadTreeBuilt(false)
|
||||||
{
|
{
|
||||||
|
@ -236,12 +233,7 @@ QuadTreeWorld::QuadTreeWorld(SceneUtil::WorkQueue* workQueue, osg::Group *parent
|
||||||
|
|
||||||
QuadTreeWorld::~QuadTreeWorld()
|
QuadTreeWorld::~QuadTreeWorld()
|
||||||
{
|
{
|
||||||
if (mWorkItem)
|
ensureQuadTreeBuilt();
|
||||||
{
|
|
||||||
mWorkItem->abort();
|
|
||||||
mWorkItem->waitTillDone();
|
|
||||||
}
|
|
||||||
|
|
||||||
mViewDataMap->clear();
|
mViewDataMap->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,27 +330,19 @@ void QuadTreeWorld::accept(osg::NodeVisitor &nv)
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuadTreeWorld::ensureQuadTreeBuilt()
|
void QuadTreeWorld::ensureQuadTreeBuilt()
|
||||||
{
|
|
||||||
{
|
{
|
||||||
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(mQuadTreeMutex);
|
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(mQuadTreeMutex);
|
||||||
if (mQuadTreeBuilt)
|
if (mQuadTreeBuilt)
|
||||||
return;
|
return;
|
||||||
if (!mQuadTreeBuilt && !mWorkItem)
|
|
||||||
{
|
|
||||||
const float minSize = 1/4.f;
|
|
||||||
mWorkItem = new BuildQuadTreeItem(mStorage, mViewDataMap.get(), minSize);
|
|
||||||
mWorkQueue->addWorkItem(mWorkItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mWorkItem->waitTillDone();
|
const float minSize = 1/4.f;
|
||||||
{
|
QuadTreeBuilder builder(mStorage, mViewDataMap.get(), minSize);
|
||||||
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(mQuadTreeMutex);
|
builder.build();
|
||||||
mRootNode = mWorkItem->getRootNode();
|
|
||||||
|
mRootNode = builder.getRootNode();
|
||||||
mRootNode->setWorld(this);
|
mRootNode->setWorld(this);
|
||||||
mQuadTreeBuilt = true;
|
mQuadTreeBuilt = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void QuadTreeWorld::enable(bool enabled)
|
void QuadTreeWorld::enable(bool enabled)
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,11 +7,6 @@
|
||||||
|
|
||||||
#include <OpenThreads/Mutex>
|
#include <OpenThreads/Mutex>
|
||||||
|
|
||||||
namespace SceneUtil
|
|
||||||
{
|
|
||||||
class WorkQueue;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace osg
|
namespace osg
|
||||||
{
|
{
|
||||||
class NodeVisitor;
|
class NodeVisitor;
|
||||||
|
@ -20,14 +15,13 @@ namespace osg
|
||||||
namespace Terrain
|
namespace Terrain
|
||||||
{
|
{
|
||||||
class RootNode;
|
class RootNode;
|
||||||
class BuildQuadTreeItem;
|
|
||||||
class ViewDataMap;
|
class ViewDataMap;
|
||||||
|
|
||||||
/// @brief Terrain implementation that loads cells into a Quad Tree, with geometry LOD and texture LOD. The entire world is displayed at all times.
|
/// @brief Terrain implementation that loads cells into a Quad Tree, with geometry LOD and texture LOD. The entire world is displayed at all times.
|
||||||
class QuadTreeWorld : public Terrain::World
|
class QuadTreeWorld : public Terrain::World
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QuadTreeWorld(SceneUtil::WorkQueue* workQueue, osg::Group* parent, osg::Group* compileRoot, Resource::ResourceSystem* resourceSystem, Storage* storage, int nodeMask, int preCompileMask=~0);
|
QuadTreeWorld(osg::Group* parent, osg::Group* compileRoot, Resource::ResourceSystem* resourceSystem, Storage* storage, int nodeMask, int preCompileMask=~0);
|
||||||
~QuadTreeWorld();
|
~QuadTreeWorld();
|
||||||
|
|
||||||
void accept(osg::NodeVisitor& nv);
|
void accept(osg::NodeVisitor& nv);
|
||||||
|
@ -39,10 +33,6 @@ namespace Terrain
|
||||||
|
|
||||||
osg::ref_ptr<RootNode> mRootNode;
|
osg::ref_ptr<RootNode> mRootNode;
|
||||||
|
|
||||||
osg::ref_ptr<SceneUtil::WorkQueue> mWorkQueue;
|
|
||||||
|
|
||||||
osg::ref_ptr<BuildQuadTreeItem> mWorkItem;
|
|
||||||
|
|
||||||
osg::ref_ptr<ViewDataMap> mViewDataMap;
|
osg::ref_ptr<ViewDataMap> mViewDataMap;
|
||||||
|
|
||||||
OpenThreads::Mutex mQuadTreeMutex;
|
OpenThreads::Mutex mQuadTreeMutex;
|
||||||
|
|
Loading…
Reference in a new issue