mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-29 19:36:43 +00:00
Do not block the loading thread while compiling composite maps in the
draw thread
This commit is contained in:
parent
7ccfec4d21
commit
c2986b3bd7
1 changed files with 8 additions and 5 deletions
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue