diff options
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/newview/llspatialpartition.cpp | 2 | ||||
| -rwxr-xr-x | indra/newview/llspatialpartition.h | 2 | ||||
| -rw-r--r-- | indra/newview/llvieweroctree.h | 2 | ||||
| -rwxr-xr-x | indra/newview/llviewerregion.cpp | 7 | ||||
| -rwxr-xr-x | indra/newview/llvocache.cpp | 8 | ||||
| -rwxr-xr-x | indra/newview/llvocache.h | 2 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 7 | 
7 files changed, 15 insertions, 15 deletions
| diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index a5045e6a4c..a1b7bfe72a 100755 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -1476,7 +1476,7 @@ S32 LLSpatialPartition::cull(LLCamera &camera, std::vector<LLDrawable *>* result  	return 0;  	} -S32 LLSpatialPartition::cull(LLCamera &camera) +S32 LLSpatialPartition::cull(LLCamera &camera, bool do_occlusion)  {  #if LL_OCTREE_PARANOIA_CHECK  	((LLSpatialGroup*)mOctree->getListener(0))->checkStates(); diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 6202fb11cb..1774baf0fe 100755 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -422,7 +422,7 @@ public:  	virtual void rebuildMesh(LLSpatialGroup* group);  	BOOL visibleObjectsInFrustum(LLCamera& camera); -	/*virtual*/ S32 cull(LLCamera &camera); // Cull on arbitrary frustum +	/*virtual*/ S32 cull(LLCamera &camera, bool do_occlusion=false); // Cull on arbitrary frustum  	S32 cull(LLCamera &camera, std::vector<LLDrawable *>* results, BOOL for_select); // Cull on arbitrary frustum  	BOOL isVisible(const LLVector3& v); diff --git a/indra/newview/llvieweroctree.h b/indra/newview/llvieweroctree.h index 7c85231ce0..7fdb5661d8 100644 --- a/indra/newview/llvieweroctree.h +++ b/indra/newview/llvieweroctree.h @@ -357,7 +357,7 @@ public:  	virtual ~LLViewerOctreePartition();  	// Cull on arbitrary frustum -	virtual S32 cull(LLCamera &camera) = 0; +	virtual S32 cull(LLCamera &camera, bool do_occlusion) = 0;  	BOOL isOcclusionEnabled();  public:	 diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 49bb05d88e..117ccdea33 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1204,13 +1204,8 @@ BOOL LLViewerRegion::idleUpdate(F32 max_update_time)  	{  		throttle = -1; //cancel the throttling -		S32 occlusion = LLPipeline::sUseOcclusion; -		LLPipeline::sUseOcclusion = 0; //disable occlusion -		  		//apply octree cullings here to pick up visible objects because rendering pipeline stops view culling at this moment -		mImpl->mVOCachePartition->cull(*LLViewerCamera::getInstance()); -		 -		LLPipeline::sUseOcclusion = occlusion; +		mImpl->mVOCachePartition->cull(*LLViewerCamera::getInstance(), false);  	}	  	else if(throttle < 0) //just recoved from the login/teleport screen  	{ diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index 11f31fcb9a..82485d7fdc 100755 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -495,7 +495,7 @@ public:  		  mPartition(part)  	{  		mLocalShift = shift; -		mUseObjectCacheOcclusion = (use_object_cache_occlusion && LLPipeline::sUseOcclusion); +		mUseObjectCacheOcclusion = use_object_cache_occlusion;  	}  	virtual bool earlyFail(LLviewerOctreeGroup* base_group) @@ -586,10 +586,10 @@ private:  	bool                mUseObjectCacheOcclusion;  }; -S32 LLVOCachePartition::cull(LLCamera &camera) +S32 LLVOCachePartition::cull(LLCamera &camera, bool do_occlusion)  {  	static LLCachedControl<bool> use_object_cache_occlusion(gSavedSettings,"UseObjectCacheOcclusion"); - +	  	if(!LLViewerRegion::sVOCacheCullingEnabled)  	{  		return 0; @@ -601,7 +601,7 @@ S32 LLVOCachePartition::cull(LLCamera &camera)  	LLVector3 region_agent = mRegionp->getOriginAgent();  	camera.calcRegionFrustumPlanes(region_agent); -	LLVOCacheOctreeCull culler(&camera, mRegionp, region_agent, use_object_cache_occlusion, this); +	LLVOCacheOctreeCull culler(&camera, mRegionp, region_agent, do_occlusion && use_object_cache_occlusion, this);  	culler.traverse(mOctree);  	return 0; diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h index ef9edf991b..04463088fa 100755 --- a/indra/newview/llvocache.h +++ b/indra/newview/llvocache.h @@ -159,7 +159,7 @@ public:  	void addEntry(LLViewerOctreeEntry* entry);  	void removeEntry(LLViewerOctreeEntry* entry); -	/*virtual*/ S32 cull(LLCamera &camera); +	/*virtual*/ S32 cull(LLCamera &camera, bool do_occlusion);  	void addOccluders(LLviewerOctreeGroup* gp);  	void resetOccluders(); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 1696f1962c..1abaaa49ac 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2408,6 +2408,11 @@ static LLFastTimer::DeclareTimer FTM_CULL("Object Culling");  void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_clip, LLPlane* planep)  { +	static LLCachedControl<bool> use_occlusion(gSavedSettings,"UseOcclusion"); +	static bool can_use_occlusion = LLGLSLShader::sNoFixedFunction +									&& LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion")  +									&& gGLManager.mHasOcclusionQuery; +  	LLFastTimer t(FTM_CULL);  	grabReferences(result); @@ -2530,7 +2535,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl  		LLVOCachePartition* vo_part = region->getVOCachePartition();  		if(vo_part)  		{ -			vo_part->cull(camera); +			vo_part->cull(camera, can_use_occlusion && use_occlusion && !gUseWireframe);  		}  	} | 
