keep tree locked until after endScene

This commit is contained in:
ZappoMan 2014-11-12 12:25:02 -08:00
parent b2f64b9362
commit d97d1119c7

View file

@ -258,19 +258,20 @@ void EntityTreeRenderer::render(RenderArgs::RenderMode renderMode) {
if (dontRenderAsScene) {
OctreeRenderer::render(renderMode);
} else {
if (_tree) {
Model::startScene();
RenderArgs args = { this, _viewFrustum, getSizeScale(), getBoundaryLevelAdjust(), renderMode,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
if (_tree) {
_tree->lockForRead();
_tree->recurseTreeWithOperation(renderOperation, &args);
_tree->unlock();
}
Model::RenderMode modelRenderMode = renderMode == RenderArgs::SHADOW_RENDER_MODE
? Model::SHADOW_RENDER_MODE : Model::DEFAULT_RENDER_MODE;
// we must call endScene while we still have the tree locked so that no one deletes a model
// on us while rendering the scene
Model::endScene(modelRenderMode, &args);
_tree->unlock();
// stats...
_meshesConsidered = args._meshesConsidered;
@ -290,6 +291,7 @@ void EntityTreeRenderer::render(RenderArgs::RenderMode renderMode) {
_translucentMeshPartsRendered = args._translucentMeshPartsRendered;
_opaqueMeshPartsRendered = args._opaqueMeshPartsRendered;
}
}
deleteReleasedModels(); // seems like as good as any other place to do some memory cleanup
}