From 31bf481a7b5f079d95be6a44a45502bb957e0941 Mon Sep 17 00:00:00 2001
From: Xiaohong Bao <bao@lindenlab.com>
Date: Wed, 21 Aug 2013 10:19:44 -0600
Subject: [PATCH] fix some objects not rendered when login process is very long

---
 indra/newview/llvieweroctree.h |  1 +
 indra/newview/llvocache.cpp    | 15 +++++++++++++--
 indra/newview/llvocache.h      |  7 +++----
 3 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llvieweroctree.h b/indra/newview/llvieweroctree.h
index 7fdb5661d8d..0cd02062233 100644
--- a/indra/newview/llvieweroctree.h
+++ b/indra/newview/llvieweroctree.h
@@ -327,6 +327,7 @@ class LLOcclusionCullingGroup : public LLviewerOctreeGroup
 
 	//virtual
 	BOOL isRecentlyVisible() const;
+	LLViewerOctreePartition* getSpatialPartition()const {return mSpatialPartition;}
 
 	static U32 getNewOcclusionQueryObjectName();
 	static void releaseOcclusionQueryObjectName(U32 name);
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index 838ac353d1c..3bd71e2648d 100755
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -261,6 +261,12 @@ void LLVOCacheEntry::addChild(LLVOCacheEntry* entry)
 	if(getEntry() != NULL && isState(INACTIVE))
 	{
 		updateParentBoundingInfo(entry);
+		if(getGroup())
+		{
+			LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*)getGroup();
+			group->unbound();
+			((LLVOCachePartition*)group->getSpatialPartition())->setDirty();
+		}
 	}
 }
 	
@@ -479,12 +485,17 @@ LLVOCachePartition::LLVOCachePartition(LLViewerRegion* regionp)
 	new LLOcclusionCullingGroup(mOctree, this);
 }
 
+void LLVOCachePartition::setDirty()
+{
+	mDirty = TRUE;
+}
+
 void LLVOCachePartition::addEntry(LLViewerOctreeEntry* entry)
 {
 	llassert(entry->hasVOCacheEntry());
 
 	mOctree->insert(entry);
-	mDirty = TRUE;
+	setDirty();
 }
 	
 void LLVOCachePartition::removeEntry(LLViewerOctreeEntry* entry)
@@ -615,7 +626,7 @@ S32 LLVOCachePartition::cull(LLCamera &camera, bool do_occlusion)
 	}
 
 	((LLviewerOctreeGroup*)mOctree->getListener(0))->rebound();
-	mCullHistory[LLViewerCamera::sCurCameraID] <<= 2;
+	mCullHistory[LLViewerCamera::sCurCameraID] <<= 1;
 
 	//localize the camera
 	LLVector3 region_agent = mRegionp->getOriginAgent();
diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
index c448b97b806..71be9de7598 100755
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -162,14 +162,13 @@ class LLVOCachePartition : public LLViewerOctreePartition, public LLTrace::MemTr
 	/*virtual*/ S32 cull(LLCamera &camera, bool do_occlusion);
 	void addOccluders(LLviewerOctreeGroup* gp);
 	void resetOccluders();
-
-	static	LLTrace::MemStatHandle	sMemStat;
-
-public:	
 	void processOccluders(LLCamera* camera);
+	
+	void setDirty();
 
 public:
 	static BOOL sNeedsOcclusionCheck;
+	static	LLTrace::MemStatHandle	sMemStat;
 
 private:
 	BOOL  mDirty;
-- 
GitLab