Automated merge with http://bitbucket.org/lindenlab/viewer-interesting
commit
75f5efff9b
|
|
@ -1132,7 +1132,7 @@ static LLTrace::TimeBlock FTM_OCCLUSION_SET_BUFFER("Set Buffer");
|
|||
static LLTrace::TimeBlock FTM_OCCLUSION_DRAW_WATER("Draw Water");
|
||||
static LLTrace::TimeBlock FTM_OCCLUSION_DRAW("Draw");
|
||||
|
||||
void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector3* region_agent)
|
||||
void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* shift)
|
||||
{
|
||||
if (mSpatialPartition->isOcclusionEnabled() && LLPipeline::sUseOcclusion > 1)
|
||||
{
|
||||
|
|
@ -1140,11 +1140,9 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector3* reg
|
|||
LLVector4a bounds[2];
|
||||
bounds[0] = mBounds[0];
|
||||
bounds[1] = mBounds[1];
|
||||
if(region_agent != NULL)
|
||||
if(shift != NULL)
|
||||
{
|
||||
LLVector4a shift((*region_agent)[0], (*region_agent)[1], (*region_agent)[2]);
|
||||
bounds[0].sub(shift);
|
||||
bounds[1].sub(shift);
|
||||
bounds[0].add(*shift);
|
||||
}
|
||||
|
||||
// Don't cull hole/edge water, unless we have the GL_ARB_depth_clamp extension
|
||||
|
|
|
|||
|
|
@ -314,7 +314,7 @@ public:
|
|||
void setOcclusionState(U32 state, S32 mode = STATE_MODE_SINGLE);
|
||||
void clearOcclusionState(U32 state, S32 mode = STATE_MODE_SINGLE);
|
||||
void checkOcclusion(); //read back last occlusion query (if any)
|
||||
void doOcclusion(LLCamera* camera, const LLVector3* region_agent = NULL); //issue occlusion query
|
||||
void doOcclusion(LLCamera* camera, const LLVector4a* shift = NULL); //issue occlusion query
|
||||
BOOL isOcclusionState(U32 state) const { return mOcclusionState[LLViewerCamera::sCurCameraID] & state ? TRUE : FALSE; }
|
||||
|
||||
BOOL needsUpdate();
|
||||
|
|
|
|||
|
|
@ -545,10 +545,10 @@ public:
|
|||
base_group->getOctreeNode()->getParent()) //never occlusion cull the root node
|
||||
{
|
||||
LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*)base_group;
|
||||
if(group->needsUpdate())//needs to issue new occlusion culling check.
|
||||
if(group->needsUpdate())
|
||||
{
|
||||
mPartition->addOccluders(group);
|
||||
return true;
|
||||
//needs to issue new occlusion culling check, perform view culling check first.
|
||||
return false;
|
||||
}
|
||||
|
||||
group->checkOcclusion();
|
||||
|
|
@ -601,7 +601,7 @@ public:
|
|||
}
|
||||
|
||||
LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*)base_group;
|
||||
if(!group->isRecentlyVisible())//needs to issue new occlusion culling check.
|
||||
if(group->needsUpdate() || !group->isRecentlyVisible())//needs to issue new occlusion culling check.
|
||||
{
|
||||
mPartition->addOccluders(group);
|
||||
group->setVisible();
|
||||
|
|
@ -693,10 +693,11 @@ void LLVOCachePartition::processOccluders(LLCamera* camera)
|
|||
}
|
||||
|
||||
LLVector3 region_agent = mRegionp->getOriginAgent();
|
||||
LLVector4a shift(region_agent[0], region_agent[1], region_agent[2]);
|
||||
for(std::set<LLOcclusionCullingGroup*>::iterator iter = mOccludedGroups.begin(); iter != mOccludedGroups.end(); ++iter)
|
||||
{
|
||||
LLOcclusionCullingGroup* group = *iter;
|
||||
group->doOcclusion(camera, ®ion_agent);
|
||||
group->doOcclusion(camera, &shift);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue