diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/pipeline.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 456b98b1e8..d3f4b7c73c 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -9288,6 +9288,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) gPipeline.pushRenderTypeMask(); + glh::matrix4f current = get_current_modelview(); glh::matrix4f projection = get_current_projection(); glh::matrix4f mat; @@ -9327,8 +9328,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) //disable occlusion culling for reflection map for now LLPipeline::sUseOcclusion = 0; - glh::matrix4f current = get_current_modelview(); - if (!camera_is_underwater) { //generate planar reflection map @@ -9337,15 +9336,10 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) gGL.matrixMode(LLRender::MM_MODELVIEW); gGL.pushMatrix(); - glh::matrix4f mat; - camera.getOpenGLTransform(mat.m); - - glh::matrix4f scal; - scal.set_scale(glh::vec3f(1, 1, -1)); - mat = scal * mat; + mat.set_scale(glh::vec3f(1, 1, -1)); + mat.set_translate(glh::vec3f(0,0,water_height*2.f)); + mat = current * mat; - // convert from CFR to OGL coord sys... - mat = glh::matrix4f((GLfloat*) OGL_TO_CFR_ROTATION) * mat; mReflectionModelView = mat; @@ -9354,6 +9348,12 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLViewerCamera::updateFrustumPlanes(camera, FALSE, TRUE); + glh::vec3f origin(0, 0, 0); + glh::matrix4f inv_mat = mat.inverse(); + inv_mat.mult_matrix_vec(origin); + + camera.setOrigin(origin.v); + glCullFace(GL_FRONT); if (LLDrawPoolWater::sNeedsReflectionUpdate) |