summaryrefslogtreecommitdiff
path: root/indra/newview/pipeline.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/pipeline.cpp')
-rw-r--r--indra/newview/pipeline.cpp43
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