diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/pipeline.cpp | 43 | 
1 files changed, 24 insertions, 19 deletions
| diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c1b7fdc780..f91878587f 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2416,14 +2416,21 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl  		{  			LLVector3 pnorm;  			F32 height = region->getWaterHeight(); -            pnorm.setVec(0,0,-(F32)water_clip); -            plane.setVec(pnorm, height * pnorm.mV[VZ]); +			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(); - +	glh::matrix4f proj = get_last_projection();  	LLGLUserClipPlane clip(plane, modelview, proj, water_clip != 0 && LLPipeline::sReflectionRender);  	LLGLDepthTest depth(GL_TRUE, GL_FALSE); @@ -2449,9 +2456,9 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl  			iter != LLWorld::getInstance()->getRegionList().end(); ++iter)  	{  		LLViewerRegion* region = *iter; -		if (water_clip != 0 && LLPipeline::sReflectionRender) +		if (water_clip != 0)  		{ -			LLPlane plane(LLVector3(0,0, -(F32)water_clip),  water_clip  * region->getWaterHeight()); +			LLPlane plane(LLVector3(0,0, (F32) -water_clip), (F32) water_clip*region->getWaterHeight());  			camera.setUserClipPlane(plane);  		}  		else @@ -9830,23 +9837,21 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)  		F32 plane_d;  		S32 water_clip = 0; -     -        if (LLViewerCamera::getInstance()->cameraUnderWater()) -		{  -            //camera is below water, clip plane points down -			water_clip = 1;             +		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;  		}  		else -		{	 -            //camera is above water, clip plane points up -			water_clip = -1; +		{	//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;  		} -        //camera is below water, clip plane points down -		pnorm = LLVector3(0,0,-(F32)water_clip); -        plane_d = water_height * pnorm.mV[VZ]; -		plane.setVec(pnorm, distance_to_water * pnorm.mV[VZ]); -  		bool materials_in_water = false;  #if MATERIALS_IN_REFLECTIONS | 
