1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-30 09:36:43 +00:00

Do not block the loading thread while compiling composite maps in the

draw thread
This commit is contained in:
bzzt 2019-02-20 13:37:00 +00:00 committed by Andrei Kortunov
parent 7ccfec4d21
commit c2986b3bd7

View file

@ -59,26 +59,29 @@ void CompositeMapRenderer::drawImplementation(osg::RenderInfo &renderInfo) const
while (!mImmediateCompileSet.empty()) while (!mImmediateCompileSet.empty())
{ {
CompositeMap* node = *mImmediateCompileSet.begin(); osg::ref_ptr<CompositeMap> node = *mImmediateCompileSet.begin();
mCompiled.insert(node); mCompiled.insert(node);
mImmediateCompileSet.erase(node);
mMutex.unlock();
compile(*node, renderInfo, nullptr); compile(*node, renderInfo, nullptr);
mMutex.lock();
mImmediateCompileSet.erase(mImmediateCompileSet.begin());
} }
double timeLeft = availableTime; double timeLeft = availableTime;
while (!mCompileSet.empty() && timeLeft > 0) while (!mCompileSet.empty() && timeLeft > 0)
{ {
CompositeMap* node = *mCompileSet.begin(); osg::ref_ptr<CompositeMap> node = *mCompileSet.begin();
mMutex.unlock();
compile(*node, renderInfo, &timeLeft); compile(*node, renderInfo, &timeLeft);
mMutex.lock();
if (node->mCompiled >= node->mDrawables.size()) if (node->mCompiled >= node->mDrawables.size())
{ {
mCompiled.insert(node); mCompiled.insert(node);
mCompileSet.erase(mCompileSet.begin()); mCompileSet.erase(node);
} }
} }
mTimer.setStartTick(); mTimer.setStartTick();