diff options
| author | Rider Linden <rider@lindenlab.com> | 2018-11-26 21:57:03 +0000 | 
|---|---|---|
| committer | Rider Linden <rider@lindenlab.com> | 2018-11-26 21:57:03 +0000 | 
| commit | 3cbe7fa715c92b36d97c3af826747b1b7a9e9383 (patch) | |
| tree | 13f012f2b24823cdc0d95eb6c7571b99bd3af2c0 | |
| parent | 917077ec29cd7e32756f760e321da7285fd1ef0a (diff) | |
| parent | 86981981c8754c13dd6ba3e01d68b49ce28c57d6 (diff) | |
Merged in graham_linden/viewer-eep-fixes (pull request #200)
SL-10099
| -rw-r--r-- | indra/newview/pipeline.cpp | 61 | 
1 files changed, 10 insertions, 51 deletions
| diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 5e597b85ff..ab933d9651 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2433,36 +2433,8 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl  	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -	//setup a clip plane in projection matrix for reflection renders (prevents flickering from occlusion culling) -	LLViewerRegion* region = gAgent.getRegion(); -	LLPlane plane; - -	if (planep) -	{ -		plane = *planep; -	} -	else  -	{ -		if (region) -		{ -			LLVector3 pnorm; -			F32 height = region->getWaterHeight(); -			if (water_clip < 0) -			{ //camera is above water, clip plane points up -				pnorm.setVec(0,0,1); -				plane.setVec(pnorm, -height); -			} -			else if (water_clip > 0) -			{	//camera is below water, clip plane points down -				pnorm = LLVector3(0,0,-1); -				plane.setVec(pnorm, height); -			} -		} -	} -	  	glh::matrix4f modelview = get_last_modelview();  	glh::matrix4f proj = get_last_projection(); -	LLGLUserClipPlane clip(plane, modelview, proj, water_clip != 0 && LLPipeline::sReflectionRender);  	LLGLDepthTest depth(GL_TRUE, GL_FALSE); @@ -2483,21 +2455,14 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl  		mCubeVB->setBuffer(LLVertexBuffer::MAP_VERTEX);  	} +    camera.disableUserClipPlane(); +  	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();   			iter != LLWorld::getInstance()->getRegionList().end(); ++iter)  	{  		LLViewerRegion* region = *iter; -		if (water_clip != 0) -		{ -			LLPlane plane(LLVector3(0,0, (F32) -water_clip), (F32) water_clip*region->getWaterHeight()); -			camera.setUserClipPlane(plane); -		} -		else -		{ -			camera.disableUserClipPlane(); -		} - -		for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++) +     +    	for (U32 i = 0; i < LLViewerRegion::NUM_PARTITIONS; i++)  		{  			LLSpatialPartition* part = region->getSpatialPartition(i);  			if (part) @@ -9869,23 +9834,19 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)          camera.setOriginAndLookAt(reflect_origin, LLVector3::z_axis, reflect_interest_point);  		//plane params -		LLVector3 pnorm; -		F32 plane_d; - +		LLVector3 pnorm;        		S32 water_clip = 0;  		if (!LLViewerCamera::getInstance()->cameraUnderWater())  		{ //camera is above water, clip plane points up  			pnorm.setVec(0,0,1); -            plane_d = -water_height; -			plane.setVec(pnorm, -distance_to_water); -			water_clip = -1; +			plane.setVec(pnorm, -water_height); +			water_clip = 1;  		}  		else  		{	//camera is below water, clip plane points down  			pnorm = LLVector3(0,0,-1); -            plane_d = water_height; -			plane.setVec(pnorm, distance_to_water); -			water_clip = 1; +			plane.setVec(pnorm, water_height); +			water_clip = -1;  		}  		bool materials_in_water = false; @@ -10002,7 +9963,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)  					LLGLUserClipPlane clip_plane(plane, mat, projection);  					LLGLDisable cull(GL_CULL_FACE); -					updateCull(camera, ref_result, -water_clip, &plane); +					updateCull(camera, ref_result, water_clip, &plane);  					stateSort(camera, ref_result);  				}	 @@ -10145,8 +10106,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)  		gPipeline.popRenderTypeMask();  		LLDrawPoolWater::sNeedsReflectionUpdate = FALSE;  		LLDrawPoolWater::sNeedsDistortionUpdate = FALSE; -		LLPlane npnorm(-pnorm, -plane_d); -		LLViewerCamera::getInstance()->setUserClipPlane(npnorm);  		LLGLState::checkStates(); | 
