fix some objects not rendered when login process is very long

master
Xiaohong Bao 2013-08-21 10:19:44 -06:00
parent 6d9af37406
commit 31bf481a7b
3 changed files with 17 additions and 6 deletions

View File

@ -327,6 +327,7 @@ public:
//virtual
BOOL isRecentlyVisible() const;
LLViewerOctreePartition* getSpatialPartition()const {return mSpatialPartition;}
static U32 getNewOcclusionQueryObjectName();
static void releaseOcclusionQueryObjectName(U32 name);

View File

@ -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();

View File

@ -162,14 +162,13 @@ public:
/*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;