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