diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index beefcf13528d361ecb688ffa296903f8559bb36b..37ac88369c125d9159e7460bab5b366bc0f4b02b 100644 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -575,10 +575,8 @@ void LLDrawPoolWater::shade2(bool edge, LLGLSLShader* shader, const LLColor3& li shader->uniform1f(LLShaderMgr::WATER_SPECULAR_EXP, light_exp); if (LLEnvironment::instance().isCloudScrollPaused()) { - static const std::array<F32, 2> zerowave{ {0.0f, 0.0f} }; - - shader->uniform2fv(LLShaderMgr::WATER_WAVE_DIR1, 1, zerowave.data()); - shader->uniform2fv(LLShaderMgr::WATER_WAVE_DIR2, 1, zerowave.data()); + shader->uniform2fv(LLShaderMgr::WATER_WAVE_DIR1, 1, LLVector2::zero.mV); + shader->uniform2fv(LLShaderMgr::WATER_WAVE_DIR2, 1, LLVector2::zero.mV); } else { @@ -599,7 +597,6 @@ void LLDrawPoolWater::shade2(bool edge, LLGLSLShader* shader, const LLColor3& li shader->uniform1f(LLShaderMgr::WATER_SUN_ANGLE, sunAngle); shader->uniform1f(LLShaderMgr::WATER_SCALED_ANGLE, scaledAngle); shader->uniform1f(LLShaderMgr::WATER_SUN_ANGLE2, 0.1f + 0.2f*sunAngle); - shader->uniform1i(LLShaderMgr::WATER_EDGE_FACTOR, edge ? 1 : 0); LLVector4 rotated_light_direction = LLEnvironment::instance().getRotatedLightNorm(); shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, rotated_light_direction.mV); @@ -614,61 +611,39 @@ void LLDrawPoolWater::shade2(bool edge, LLGLSLShader* shader, const LLColor3& li shader->uniform1f(LLShaderMgr::WATER_REFSCALE, pwater->getScaleAbove()); } - { + { + LLGLEnable depth_clamp(gGLManager.mHasDepthClamp ? GL_DEPTH_CLAMP : 0); LLGLDisable cullface(GL_CULL_FACE); + for (LLFace* face : mDrawFace) + { + if (gSky.mVOSkyp->isReflFace(face)) + { + continue; + } - if (edge) - { - for (std::vector<LLFace*>::iterator iter = mDrawFace.begin(); iter != mDrawFace.end(); iter++) - { - LLFace *face = *iter; - if (face) - { - LLVOWater* water = (LLVOWater*) face->getViewerObject(); - if (diffTex > -1) - { - gGL.getTexUnit(diffTex)->bind(face->getTexture()); - } - - if (water) - { - bool edge_patch = water->getIsEdgePatch(); - if (edge_patch) - { - //sNeedsReflectionUpdate = TRUE; - face->renderIndexed(); - } - } - } - } - } - else - { - for (std::vector<LLFace*>::iterator iter = mDrawFace.begin(); iter != mDrawFace.end(); iter++) - { - LLFace *face = *iter; - if (face) - { - LLVOWater* water = (LLVOWater*) face->getViewerObject(); - if (diffTex > -1) - { - gGL.getTexUnit(diffTex)->bind(face->getTexture()); - } - - if (water) - { - bool edge_patch = water->getIsEdgePatch(); - if (!edge_patch) - { - sNeedsReflectionUpdate = TRUE; - sNeedsDistortionUpdate = TRUE; - face->renderIndexed(); - } - } - } - } - } - } + LLVOWater* water = (LLVOWater*)face->getViewerObject(); + if (diffTex > -1) + { + gGL.getTexUnit(diffTex)->bind(face->getTexture()); + } + + if (!water->getIsEdgePatch()) + { + sNeedsReflectionUpdate = TRUE; + sNeedsDistortionUpdate = TRUE; + } + + if (water->getUseTexture() || !water->getIsEdgePatch() || gGLManager.mHasDepthClamp || deferred_render) + { + face->renderIndexed(); + } + else + { + LLGLSquashToFarClip far_clip(get_current_projection()); + face->renderIndexed(); + } + } + } gGL.getTexUnit(bumpTex)->unbind(LLTexUnit::TT_TEXTURE); gGL.getTexUnit(bumpTex2)->unbind(LLTexUnit::TT_TEXTURE); @@ -762,7 +737,7 @@ void LLDrawPoolWater::shade() else { shader = &gWaterProgram; - edge_shader = &gWaterEdgeProgram; + edge_shader = nullptr; } static const LLCachedControl<bool> render_water_mip_normal(gSavedSettings, "RenderWaterMipNormal"); @@ -792,7 +767,7 @@ void LLDrawPoolWater::shade() } shade2(false, shader, light_diffuse, light_dir, light_exp); - shade2(true, edge_shader ? edge_shader : shader, light_diffuse, light_dir, light_exp); + //shade2(true, edge_shader ? edge_shader : shader, light_diffuse, light_dir, light_exp); gGL.getTexUnit(0)->activate(); gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE); diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index 6365df09e13834e241806460fa332d85b8f6fc8e..81bb95cb2424262881ad862fac8a66c55119e96d 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -1197,12 +1197,6 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh bounds[0].add(*shift); } - F32 OCCLUSION_FUDGE_Z = SG_OCCLUSION_FUDGE; //<-- #Solution #2 - if (LLDrawPool::POOL_WATER == mSpatialPartition->mDrawableType) - { - OCCLUSION_FUDGE_Z = 1.; - } - // Don't cull hole/edge water, unless we have the GL_ARB_depth_clamp extension if (earlyFail(camera, bounds)) { @@ -1262,7 +1256,7 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh shader->uniform3fv(LLShaderMgr::BOX_CENTER, 1, bounds[0].getF32ptr()); shader->uniform3f(LLShaderMgr::BOX_SIZE, bounds[1][0]+SG_OCCLUSION_FUDGE, bounds[1][1]+SG_OCCLUSION_FUDGE, - bounds[1][2]+OCCLUSION_FUDGE_Z); + bounds[1][2]+SG_OCCLUSION_FUDGE); if (!use_depth_clamp && mSpatialPartition->mDrawableType == LLDrawPool::POOL_VOIDWATER) { diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index d4c379e9bacc6d72ed8df2d4ddb32c573e39db81..eda9560f37cd145b4288b0a1479019d99c862cce 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -9398,7 +9398,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) set_current_modelview(current); } - //LLPipeline::sUseOcclusion = occlusion; + LLPipeline::sUseOcclusion = occlusion; camera.setOrigin(camera_in.getOrigin()); //render distortion map @@ -9441,10 +9441,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) mWaterDis.bindTarget(); mWaterDis.getViewport(gGLViewport); - - gGL.setColorMask(true, true); - mWaterDis.clear(); - gGL.setColorMask(true, false); F32 water_dist = water_height * LLPipeline::sDistortionWaterClipPlaneMargin;