From 2bb6e7b27639026e9652419391244992c71c058e Mon Sep 17 00:00:00 2001 From: slipher Date: Sat, 21 Feb 2026 02:53:38 -0600 Subject: [PATCH 1/2] Use grid deluxe for world with r_lightMode 2 Increased macro permutations isn't much of a concern any more since we don't build unused ones by default. --- src/engine/renderer/gl_shader.cpp | 15 +-------------- src/engine/renderer/gl_shader.h | 2 -- src/engine/renderer/tr_bsp.cpp | 6 +++++- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index a9adb51228..7e0b10b0f7 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -2114,7 +2114,7 @@ bool GLCompileMacro_USE_GRID_DELUXE_MAPPING::HasConflictingMacros(size_t permuta { for (const GLCompileMacro* macro : macros) { - if ((permutation & macro->GetBit()) != 0 && (macro->GetType() == USE_DELUXE_MAPPING || macro->GetType() == USE_BSP_SURFACE)) + if ((permutation & macro->GetBit()) != 0 && (macro->GetType() == USE_DELUXE_MAPPING)) { return true; } @@ -2142,19 +2142,6 @@ bool GLCompileMacro_USE_GRID_LIGHTING::HasConflictingMacros(size_t permutation, return false; } -bool GLCompileMacro_USE_BSP_SURFACE::HasConflictingMacros(size_t permutation, const std::vector ¯os) const -{ - for (const GLCompileMacro* macro : macros) - { - if ((permutation & macro->GetBit()) != 0 && (macro->GetType() == USE_GRID_DELUXE_MAPPING)) - { - return true; - } - } - - return false; -} - void GLShader::RegisterUniform( GLUniform* uniform ) { _uniforms.push_back( uniform ); } diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index 0f857de57c..809918df6f 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -1029,8 +1029,6 @@ class GLCompileMacro_USE_BSP_SURFACE : return "USE_BSP_SURFACE"; } - bool HasConflictingMacros(size_t permutation, const std::vector< GLCompileMacro * > ¯os) const override; - EGLCompileMacro GetType() const override { return EGLCompileMacro::USE_BSP_SURFACE; diff --git a/src/engine/renderer/tr_bsp.cpp b/src/engine/renderer/tr_bsp.cpp index 29cb4bb626..f74c6572ee 100644 --- a/src/engine/renderer/tr_bsp.cpp +++ b/src/engine/renderer/tr_bsp.cpp @@ -4653,7 +4653,11 @@ static void SetWorldLight() { // Game model surfaces use grid lighting, they don't have vertex light colors. tr.modelDeluxe = deluxeMode_t::GRID; - // Only game models use emulated deluxe map from light direction grid. + // Only game models use emulated deluxe map from light direction grid, unless the + // `r_lightMode 2` debug option is used. + if ( tr.worldLight == lightMode_t::GRID ) { + tr.worldDeluxe = deluxeMode_t::GRID; + } } } From fae31909037f9eaa5a4cfb6a10888a3c0cc0399b Mon Sep 17 00:00:00 2001 From: slipher Date: Wed, 25 Feb 2026 15:00:41 -0600 Subject: [PATCH 2/2] Use half-Lambert lighting iff grid lighting is used Half-Lambert lighting makes goes well with the light grid: the single light direction is a crude approximation, so it makes sense to soften the directionality. For now this only changes anything for the `r_lightMode 2` debug option, but it may be useful for implementing grid lighting for BSP entities later. --- src/engine/renderer/glsl_source/computeLight_fp.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/renderer/glsl_source/computeLight_fp.glsl b/src/engine/renderer/glsl_source/computeLight_fp.glsl index 34c59389f0..f924a08a69 100644 --- a/src/engine/renderer/glsl_source/computeLight_fp.glsl +++ b/src/engine/renderer/glsl_source/computeLight_fp.glsl @@ -90,7 +90,7 @@ void computeDeluxeLight( vec3 lightDir, vec3 normal, vec3 viewDir, vec3 lightCol // clamp( NdotL, 0.0, 1.0 ) is done below float NdotL = dot( normal, lightDir ); - #if !defined(USE_BSP_SURFACE) && defined(r_halfLambertLighting) + #if defined(USE_GRID_LIGHTING) && defined(r_halfLambertLighting) // http://developer.valvesoftware.com/wiki/Half_Lambert NdotL = NdotL * 0.5 + 0.5; NdotL *= NdotL;