From 3231e93dbc709c69a8e2e3fe2a3cec91044e887e Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Sun, 28 Nov 2021 01:19:43 -0500
Subject: [PATCH] Fix impostors rendering with green pixels, grey pixels, weird
 colors, etc

---
 .../shaders/class1/deferred/alphaF.glsl       | 23 ++++++++-----------
 .../shaders/class1/deferred/impostorF.glsl    |  4 ++--
 2 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
index f170988e40e..4457356e386 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -183,13 +183,17 @@ void main()
 
     vec4 diffuse_srgb = diffuse_tap;
 
-#ifdef FOR_IMPOSTOR
-    vec4 color;
-    color.rgb = diffuse_srgb.rgb;
-    color.a = 1.0;
+    float final_alpha = diffuse_srgb.a;
 
-    float final_alpha = diffuse_srgb.a * vertex_color.a;
+#ifdef USE_VERTEX_COLOR
+    final_alpha *= vertex_color.a;
     diffuse_srgb.rgb *= vertex_color.rgb;
+#endif
+
+    vec3 diffuse_linear = srgb_to_linear(diffuse_srgb.rgb);
+
+#ifdef FOR_IMPOSTOR
+    vec4 color = vec4(diffuse_linear,final_alpha);
 
     // Insure we don't pollute depth with invis pixels in impostor rendering
     //
@@ -200,15 +204,6 @@ void main()
 #else
     vec3 light_dir = (sun_up_factor == 1) ? sun_dir: moon_dir;
 
-    float final_alpha = diffuse_srgb.a;
-
-#ifdef USE_VERTEX_COLOR
-    final_alpha *= vertex_color.a;
-    diffuse_srgb.rgb *= vertex_color.rgb;
-#endif
-
-    vec3 diffuse_linear = srgb_to_linear(diffuse_srgb.rgb);
-
     vec3 sunlit;
     vec3 amblit;
     vec3 additive;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
index eb6e56e718c..f41a8e8c47e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
@@ -41,6 +41,7 @@ uniform sampler2D specularMap;
 VARYING vec2 vary_texcoord0;
 
 vec3 linear_to_srgb(vec3 c);
+vec2 encode_normal (vec3 n);
 
 void main() 
 {
@@ -54,8 +55,7 @@ void main()
 	vec4 norm = texture2D(normalMap,   vary_texcoord0.xy);
 	vec4 spec = texture2D(specularMap, vary_texcoord0.xy);
 
-	col.rgb = linear_to_srgb(col.rgb);
 	frag_data[0] = vec4(col.rgb, 0.0);
 	frag_data[1] = spec;
-	frag_data[2] = vec4(norm.xy,0,0);
+	frag_data[2] = vec4(encode_normal(norm.xyz),0,0);
 }
-- 
GitLab