From 47be24e467a9fe5a2c0466a49f58769f6b81fdc4 Mon Sep 17 00:00:00 2001
From: RunitaiLinden <davep@lindenlab.com>
Date: Thu, 15 Jun 2023 14:51:57 -0500
Subject: [PATCH] SL-19835 Followup -- fix for emissive alpha objects blocking
 water rendering

---
 .../shaders/class3/deferred/materialF.glsl    | 19 -------------------
 indra/newview/lldrawpoolalpha.cpp             |  4 +---
 2 files changed, 1 insertion(+), 22 deletions(-)

diff --git a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
index ab40298f440..615a25d2de6 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
@@ -353,24 +353,6 @@ void main()
 
     float glare = 0.0;
 
-#if 0 //wrong implementation
-    if (glossiness > 0.0)  // specular reflection
-    {
-        float sa        = dot(normalize(refnormpersp), light_dir.xyz);
-        vec3  dumbshiny = sunlit_linear * shadow * (texture(lightFunc, vec2(sa, glossiness)).r);
-
-        // add the two types of shiny together
-        vec3 spec_contrib = dumbshiny * spec.rgb;
-        bloom             = dot(spec_contrib, spec_contrib) / 6;
-
-        glare = max(spec_contrib.r, spec_contrib.g);
-        glare = max(glare, spec_contrib.b);
-
-        color += spec_contrib;
-
-        applyGlossEnv(color, glossenv, spec, pos.xyz, norm.xyz);
-    }
-#else //right implementation ported from pointLightF.glsl
     if (glossiness > 0.0)
     {
         vec3  lv = light_dir.xyz;
@@ -395,7 +377,6 @@ void main()
         // add radiance map
         applyGlossEnv(color, glossenv, spec, pos.xyz, norm.xyz);
     }
-#endif
 
     color = mix(color.rgb, legacy_adjust_fullbright(diffcol.rgb), emissive);
 
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 060129d275d..07b7be0fc83 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -649,8 +649,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, bool depth_only, bool rigged)
 			bool is_particle_or_hud_particle = group->getSpatialPartition()->mPartitionType == LLViewerRegion::PARTITION_PARTICLE
 													  || group->getSpatialPartition()->mPartitionType == LLViewerRegion::PARTITION_HUD_PARTICLE;
 
-			bool draw_glow_for_this_partition = mShaderLevel > 0; // no shaders = no glow.
-
 			bool disable_cull = is_particle_or_hud_particle;
 			LLGLDisable cull(disable_cull ? GL_CULL_FACE : 0);
 
@@ -818,7 +816,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, bool depth_only, bool rigged)
 				}
 
 				// If this alpha mesh has glow, then draw it a second time to add the destination-alpha (=glow).  Interleaving these state-changing calls is expensive, but glow must be drawn Z-sorted with alpha.
-				if (draw_glow_for_this_partition &&
+				if (getType() != LLDrawPool::POOL_ALPHA_PRE_WATER &&
 					params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE))
 				{
                     if (params.mAvatar != nullptr)
-- 
GitLab