mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-03 09:19:41 +00:00
Use the time elapsed instead of # compiled as limit
This commit is contained in:
parent
8a6d909b22
commit
47ca8aeee5
2 changed files with 17 additions and 17 deletions
|
@ -10,7 +10,7 @@ namespace Terrain
|
|||
{
|
||||
|
||||
CompositeMapRenderer::CompositeMapRenderer()
|
||||
: mNumCompilePerFrame(1)
|
||||
: mTimeAvailable(0.0005)
|
||||
{
|
||||
setSupportsDisplayList(false);
|
||||
setCullingActive(false);
|
||||
|
@ -24,8 +24,6 @@ void CompositeMapRenderer::drawImplementation(osg::RenderInfo &renderInfo) const
|
|||
{
|
||||
mCompiled.clear();
|
||||
|
||||
unsigned int numCompiled = 0;
|
||||
|
||||
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(mMutex);
|
||||
|
||||
if (mImmediateCompileSet.empty() && mCompileSet.empty())
|
||||
|
@ -36,28 +34,27 @@ void CompositeMapRenderer::drawImplementation(osg::RenderInfo &renderInfo) const
|
|||
CompositeMap* node = *mImmediateCompileSet.begin();
|
||||
mCompiled.insert(node);
|
||||
|
||||
compile(*node, renderInfo);
|
||||
compile(*node, renderInfo, NULL);
|
||||
|
||||
mImmediateCompileSet.erase(mImmediateCompileSet.begin());
|
||||
|
||||
++numCompiled;
|
||||
}
|
||||
|
||||
while (!mCompileSet.empty() && numCompiled <= mNumCompilePerFrame)
|
||||
double timeLeft = mTimeAvailable;
|
||||
|
||||
while (!mCompileSet.empty() && timeLeft > 0)
|
||||
{
|
||||
CompositeMap* node = *mCompileSet.begin();
|
||||
|
||||
compile(*node, renderInfo);
|
||||
|
||||
++numCompiled;
|
||||
compile(*node, renderInfo, &timeLeft);
|
||||
|
||||
mCompiled.insert(node);
|
||||
mCompileSet.erase(mCompileSet.begin());
|
||||
}
|
||||
}
|
||||
|
||||
void CompositeMapRenderer::compile(CompositeMap &compositeMap, osg::RenderInfo &renderInfo) const
|
||||
void CompositeMapRenderer::compile(CompositeMap &compositeMap, osg::RenderInfo &renderInfo, double* timeLeft) const
|
||||
{
|
||||
osg::Timer timer;
|
||||
osg::State& state = *renderInfo.getState();
|
||||
osg::GLExtensions* ext = state.get<osg::GLExtensions>();
|
||||
|
||||
|
@ -102,11 +99,14 @@ void CompositeMapRenderer::compile(CompositeMap &compositeMap, osg::RenderInfo &
|
|||
|
||||
GLuint fboId = state.getGraphicsContext() ? state.getGraphicsContext()->getDefaultFboId() : 0;
|
||||
ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, fboId);
|
||||
|
||||
if (timeLeft)
|
||||
*timeLeft -= timer.time_s();
|
||||
}
|
||||
|
||||
void CompositeMapRenderer::setNumCompilePerFrame(int num)
|
||||
void CompositeMapRenderer::setTimeAvailableForCompile(double time)
|
||||
{
|
||||
mNumCompilePerFrame = num;
|
||||
mTimeAvailable = time;
|
||||
}
|
||||
|
||||
void CompositeMapRenderer::addCompositeMap(CompositeMap* compositeMap, bool immediate)
|
||||
|
|
|
@ -35,10 +35,10 @@ namespace Terrain
|
|||
|
||||
virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
|
||||
|
||||
void compile(CompositeMap& compositeMap, osg::RenderInfo& renderInfo) const;
|
||||
void compile(CompositeMap& compositeMap, osg::RenderInfo& renderInfo, double* timeLeft) const;
|
||||
|
||||
/// Set the maximum number of (non-immediate) composite maps to compile per frame
|
||||
void setNumCompilePerFrame(int num);
|
||||
/// Set the available time in seconds for compiling (non-immediate) composite maps each frame
|
||||
void setTimeAvailableForCompile(double time);
|
||||
|
||||
/// Add a composite map to be rendered
|
||||
void addCompositeMap(CompositeMap* map, bool immediate=false);
|
||||
|
@ -47,7 +47,7 @@ namespace Terrain
|
|||
void setImmediate(CompositeMap* map);
|
||||
|
||||
private:
|
||||
unsigned int mNumCompilePerFrame;
|
||||
double mTimeAvailable;
|
||||
|
||||
typedef std::set<osg::ref_ptr<CompositeMap> > CompileSet;
|
||||
|
||||
|
|
Loading…
Reference in a new issue