fix for SH-4659:crash at LLOcclusionCullingGroup::doOcclusion line 1150

master
Xiaohong Bao 2014-01-09 21:17:49 -07:00
parent 6a11332552
commit 87f852ee67
4 changed files with 16 additions and 6 deletions

View File

@ -980,13 +980,15 @@ void LLViewerRegion::addToVOCacheTree(LLVOCacheEntry* entry)
if(entry->hasState(LLVOCacheEntry::IN_VO_TREE))
{
return; //already in the tree.
}
entry->setState(LLVOCacheEntry::IN_VO_TREE);
}
llassert_always(!entry->getGroup()); //not in octree.
llassert(!entry->getEntry()->hasDrawable()); //not have drawables
mImpl->mVOCachePartition->addEntry(entry->getEntry());
if(mImpl->mVOCachePartition->addEntry(entry->getEntry()))
{
entry->setState(LLVOCacheEntry::IN_VO_TREE);
}
}
void LLViewerRegion::removeFromVOCacheTree(LLVOCacheEntry* entry)

View File

@ -609,11 +609,18 @@ LLVOCachePartition::LLVOCachePartition(LLViewerRegion* regionp)
new LLVOCacheGroup(mOctree, this);
}
void LLVOCachePartition::addEntry(LLViewerOctreeEntry* entry)
bool LLVOCachePartition::addEntry(LLViewerOctreeEntry* entry)
{
llassert(entry->hasVOCacheEntry());
if(!llfinite(entry->getBinRadius()) || !entry->getPositionGroup().isFinite3())
{
return false; //data corrupted
}
mOctree->insert(entry);
return true;
}
void LLVOCachePartition::removeEntry(LLViewerOctreeEntry* entry)

View File

@ -188,7 +188,7 @@ class LLVOCachePartition : public LLViewerOctreePartition, public LLTrace::MemTr
public:
LLVOCachePartition(LLViewerRegion* regionp);
void addEntry(LLViewerOctreeEntry* entry);
bool addEntry(LLViewerOctreeEntry* entry);
void removeEntry(LLViewerOctreeEntry* entry);
/*virtual*/ S32 cull(LLCamera &camera, bool do_occlusion);
void addOccluders(LLViewerOctreeGroup* gp);

View File

@ -2786,7 +2786,8 @@ void LLPipeline::doOcclusion(LLCamera& camera, LLRenderTarget& source, LLRenderT
void LLPipeline::doOcclusion(LLCamera& camera)
{
if (LLPipeline::sUseOcclusion > 1 && (sCull->hasOcclusionGroups() || LLVOCachePartition::sNeedsOcclusionCheck))
if (LLPipeline::sUseOcclusion > 1 && !LLSpatialPartition::sTeleportRequested &&
(sCull->hasOcclusionGroups() || LLVOCachePartition::sNeedsOcclusionCheck))
{
LLVertexBuffer::unbind();