diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index e1684c19df2dd183cf4d7a20b875c28671590f92..e8eba432428330023c923b5c9ee6814fbb9191a1 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -809,7 +809,14 @@ class LLSpatialSetOcclusionState : public OctreeTraveler public: U32 mState; LLSpatialSetOcclusionState(U32 state) : mState(state) { } - virtual void visit(const OctreeNode* branch) { ((LLOcclusionCullingGroup*) branch->getListener(0))->setOcclusionState(mState); } + virtual void visit(const OctreeNode* branch) + { + LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*)branch->getListener(0); + if(group) + { + group->setOcclusionState(mState); + } + } }; class LLSpatialSetOcclusionStateDiff : public LLSpatialSetOcclusionState @@ -821,7 +828,7 @@ class LLSpatialSetOcclusionStateDiff : public LLSpatialSetOcclusionState { LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*) n->getListener(0); - if (!group->isOcclusionState(mState)) + if (group && !group->isOcclusionState(mState)) { OctreeTraveler::traverse(n); } @@ -945,7 +952,14 @@ class LLSpatialClearOcclusionState : public OctreeTraveler U32 mState; LLSpatialClearOcclusionState(U32 state) : mState(state) { } - virtual void visit(const OctreeNode* branch) { ((LLOcclusionCullingGroup*) branch->getListener(0))->clearOcclusionState(mState); } + virtual void visit(const OctreeNode* branch) + { + LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*)branch->getListener(0); + if(group) + { + group->clearOcclusionState(mState); + } + } }; class LLSpatialClearOcclusionStateDiff : public LLSpatialClearOcclusionState diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 18232e75c97148d2e874b54562ab45183d3cb0a4..0c2c2365c7d7a493175243945bc9e372cd395be7 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1183,6 +1183,9 @@ void LLViewerRegion::clearCachedVisibleObjects() mImpl->mWaitingList.clear(); mImpl->mVisibleGroups.clear(); + //reset all occluders + mImpl->mVOCachePartition->resetOccluders(); + //clean visible entries for(LLVOCacheEntry::vocache_entry_set_t::iterator iter = mImpl->mVisibleEntries.begin(); iter != mImpl->mVisibleEntries.end();) {