Automated merge with http://bitbucket.org/lindenlab/viewer-interesting
commit
cdf5a1e1cc
|
|
@ -1058,12 +1058,8 @@ bool LLDrawable::isRecentlyVisible() const
|
|||
|
||||
if(!vis)
|
||||
{
|
||||
LLviewerOctreeGroup* group = getGroup();
|
||||
if (group && group->isRecentlyVisible())
|
||||
{
|
||||
LLViewerOctreeEntryData::setVisible();
|
||||
vis = TRUE ;
|
||||
}
|
||||
const U32 MIN_VIS_FRAME_RANGE = 2 ; //two frames:the current one and the last one.
|
||||
vis = (sCurVisible - getVisible() < MIN_VIS_FRAME_RANGE);
|
||||
}
|
||||
|
||||
return vis ;
|
||||
|
|
@ -1140,14 +1136,6 @@ LLSpatialPartition* LLDrawable::getSpatialPartition()
|
|||
return retval;
|
||||
}
|
||||
|
||||
//virtual
|
||||
U32 LLDrawable::getMinFrameRange() const
|
||||
{
|
||||
const U32 MIN_VIS_FRAME_RANGE = 2 ; //two frames:the current one and the last one.
|
||||
|
||||
return MIN_VIS_FRAME_RANGE ;
|
||||
}
|
||||
|
||||
//=======================================
|
||||
// Spatial Partition Bridging Drawable
|
||||
//=======================================
|
||||
|
|
|
|||
|
|
@ -194,7 +194,6 @@ public:
|
|||
|
||||
LLSpatialPartition* getSpatialPartition();
|
||||
|
||||
virtual U32 getMinFrameRange()const;
|
||||
void removeFromOctree();
|
||||
|
||||
void setSpatialBridge(LLSpatialBridge* bridge) { mSpatialBridge = (LLDrawable*) bridge; }
|
||||
|
|
|
|||
|
|
@ -409,7 +409,7 @@ bool LLViewerOctreeEntryData::isRecentlyVisible() const
|
|||
return true;
|
||||
}
|
||||
|
||||
return (sCurVisible - mEntry->mVisible < getMinFrameRange());
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLViewerOctreeEntryData::setVisible() const
|
||||
|
|
|
|||
|
|
@ -149,8 +149,6 @@ public:
|
|||
|
||||
virtual void setOctreeEntry(LLViewerOctreeEntry* entry);
|
||||
|
||||
virtual U32 getMinFrameRange()const = 0;
|
||||
|
||||
F32 getBinRadius() const {return mEntry->getBinRadius();}
|
||||
const LLVector4a* getSpatialExtents() const;
|
||||
LLviewerOctreeGroup* getGroup()const;
|
||||
|
|
@ -327,6 +325,7 @@ public:
|
|||
|
||||
//virtual
|
||||
BOOL isRecentlyVisible() const;
|
||||
LLViewerOctreePartition* getSpatialPartition()const {return mSpatialPartition;}
|
||||
|
||||
static U32 getNewOcclusionQueryObjectName();
|
||||
static void releaseOcclusionQueryObjectName(U32 name);
|
||||
|
|
|
|||
|
|
@ -238,12 +238,6 @@ void LLVOCacheEntry::setState(U32 state)
|
|||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
U32 LLVOCacheEntry::getMinFrameRange()const
|
||||
{
|
||||
return mMinFrameRange;
|
||||
}
|
||||
|
||||
void LLVOCacheEntry::addChild(LLVOCacheEntry* entry)
|
||||
{
|
||||
llassert(entry != NULL);
|
||||
|
|
@ -261,6 +255,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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -365,6 +365,28 @@ BOOL LLVOCacheEntry::writeToFile(LLAPRFile* apr_file) const
|
|||
return success ;
|
||||
}
|
||||
|
||||
bool LLVOCacheEntry::isRecentlyVisible() const
|
||||
{
|
||||
bool vis = LLViewerOctreeEntryData::isRecentlyVisible();
|
||||
|
||||
if(!vis)
|
||||
{
|
||||
vis = (sCurVisible - getVisible() < mMinFrameRange);
|
||||
}
|
||||
|
||||
if(!vis && !mParentID && mSceneContrib > 0.f)
|
||||
{
|
||||
//projection area: mSceneContrib
|
||||
|
||||
//squared distance
|
||||
const F32 SQUARED_CUT_OFF_DIST = 225.0; //15m
|
||||
F32 rad = getBinRadius();
|
||||
vis = (rad * rad / mSceneContrib > SQUARED_CUT_OFF_DIST);
|
||||
}
|
||||
|
||||
return vis;
|
||||
}
|
||||
|
||||
void LLVOCacheEntry::calcSceneContribution(const LLVector3& camera_origin, bool needs_update, U32 last_update)
|
||||
{
|
||||
if(!needs_update && getVisible() >= last_update)
|
||||
|
|
@ -381,8 +403,11 @@ void LLVOCacheEntry::calcSceneContribution(const LLVector3& camera_origin, bool
|
|||
lookAt.setSub(center, origin);
|
||||
F32 squared_dist = lookAt.dot3(lookAt).getF32();
|
||||
|
||||
F32 rad = getBinRadius();
|
||||
mSceneContrib = rad * rad / squared_dist;
|
||||
if(squared_dist > 0.f)
|
||||
{
|
||||
F32 rad = getBinRadius();
|
||||
mSceneContrib = rad * rad / squared_dist;
|
||||
}
|
||||
|
||||
setVisible();
|
||||
}
|
||||
|
|
@ -479,12 +504,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 +645,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();
|
||||
|
|
|
|||
|
|
@ -83,12 +83,14 @@ public:
|
|||
bool hasState(U32 state) {return mState & state;}
|
||||
U32 getState() const {return mState;}
|
||||
|
||||
//virtual
|
||||
bool isRecentlyVisible() const;
|
||||
|
||||
U32 getLocalID() const { return mLocalID; }
|
||||
U32 getCRC() const { return mCRC; }
|
||||
S32 getHitCount() const { return mHitCount; }
|
||||
S32 getCRCChangeCount() const { return mCRCChangeCount; }
|
||||
U32 getMinFrameRange()const;
|
||||
|
||||
|
||||
void calcSceneContribution(const LLVector3& camera_origin, bool needs_update, U32 last_update);
|
||||
void setSceneContribution(F32 scene_contrib) {mSceneContrib = scene_contrib;}
|
||||
F32 getSceneContribution() const { return mSceneContrib;}
|
||||
|
|
@ -162,14 +164,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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue