From ff7ba2b7a1dd3fddfc293e5d5fdd5f2cf6dfaeca Mon Sep 17 00:00:00 2001 From: Andrey2470T Date: Wed, 7 Feb 2024 01:11:01 +0300 Subject: [PATCH] Don't whiten mapblocks and entities if the ambient light color is grayscale --- client/shaders/nodes_shader/opengl_fragment.glsl | 3 ++- client/shaders/object_shader/opengl_fragment.glsl | 3 ++- src/client/clientenvironment.cpp | 2 +- src/client/content_cao.cpp | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 82246e12d..d638f42c8 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -380,7 +380,8 @@ void main(void) color = base.rgb; vec4 col = vec4(color.rgb * varColor.rgb, 1.0); - col.rgb += ambientLight * ambientColor.rgb; + if (!(ambientColor.r == ambientColor.g && ambientColor.r == ambientColor.b)) + col.rgb += ambientLight * ambientColor.rgb; #ifdef ENABLE_DYNAMIC_SHADOWS if (f_shadow_strength > 0.0) { diff --git a/client/shaders/object_shader/opengl_fragment.glsl b/client/shaders/object_shader/opengl_fragment.glsl index 9c3ee84a7..3a1163203 100644 --- a/client/shaders/object_shader/opengl_fragment.glsl +++ b/client/shaders/object_shader/opengl_fragment.glsl @@ -382,7 +382,8 @@ void main(void) color = base.rgb; vec4 col = vec4(color.rgb * varColor.rgb, 1.0); - col.rgb += ambientLight * ambientColor.rgb; + if (!(ambientColor.r == ambientColor.g && ambientColor.r == ambientColor.b)) + col.rgb += ambientLight * ambientColor.rgb; col.rgb *= vIDiff; #ifdef ENABLE_DYNAMIC_SHADOWS diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index aa6ea157b..412cd57c1 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -262,7 +262,7 @@ void ClientEnvironment::step(float dtime) u16 light = getInteriorLight(node_at_lplayer, 0, m_client->ndef()); lplayer->light_color = encode_light(light, 0, - m_client->getEnv().getLocalPlayer()->getLighting().ambient_light.luminance); // this transfers light.alpha + lplayer->getLighting().ambient_light.luminance); // this transfers light.alpha final_color_blend(&lplayer->light_color, light, day_night_ratio); } diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 8644d50de..848ac1c6d 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -908,7 +908,7 @@ void GenericCAO::updateLight(u32 day_night_ratio) // based on the entity glow. if (m_enable_shaders) light = encode_light(light_at_pos, m_prop.glow, - m_client->getEnv().getLocalPlayer()->getLighting().ambient_light.luminance); + m_env->getLocalPlayer()->getLighting().ambient_light.luminance); else final_color_blend(&light, light_at_pos, day_night_ratio);