diff --git a/src/engine/renderer/Material.cpp b/src/engine/renderer/Material.cpp index 26e960b5b9..02d168a740 100644 --- a/src/engine/renderer/Material.cpp +++ b/src/engine/renderer/Material.cpp @@ -222,15 +222,12 @@ void UpdateSurfaceDataGeneric3D( uint32_t* materials, Material& material, drawSu // u_AlphaThreshold gl_genericShaderMaterial->SetUniform_AlphaTest( pStage->stateBits ); - // u_InverseLightFactor - float inverseLightFactor = pStage->cancelOverBright ? tr.mapInverseLightFactor : 1.0f; - gl_genericShaderMaterial->SetUniform_InverseLightFactor( inverseLightFactor ); - // u_ColorModulate colorGen_t rgbGen = SetRgbGen( pStage ); alphaGen_t alphaGen = SetAlphaGen( pStage ); - gl_genericShaderMaterial->SetUniform_ColorModulate( rgbGen, alphaGen ); + bool mayUseVertexOverbright = pStage->type == stageType_t::ST_COLORMAP && drawSurf->bspSurface; + gl_genericShaderMaterial->SetUniform_ColorModulate( rgbGen, alphaGen, mayUseVertexOverbright ); Tess_ComputeColor( pStage ); gl_genericShaderMaterial->SetUniform_Color( tess.svars.color ); @@ -291,12 +288,9 @@ void UpdateSurfaceDataLightMapping( uint32_t* materials, Material& material, dra bool enableGridLighting = ( lightMode == lightMode_t::GRID ); bool enableGridDeluxeMapping = ( deluxeMode == deluxeMode_t::GRID ); - // u_InverseLightFactor - /* HACK: use sign to know if there is a light or not, and - then if it will receive overbright multiplication or not. */ - bool cancelOverBright = pStage->cancelOverBright || lightMode == lightMode_t::FULLBRIGHT; - float inverseLightFactor = cancelOverBright ? tr.mapInverseLightFactor : -tr.mapInverseLightFactor; - gl_lightMappingShaderMaterial->SetUniform_InverseLightFactor( inverseLightFactor ); + // u_LightFactor + gl_lightMappingShaderMaterial->SetUniform_LightFactor( + lightMode == lightMode_t::FULLBRIGHT ? 1.0f : tr.mapLightFactor ); // u_ColorModulate gl_lightMappingShaderMaterial->SetUniform_ColorModulate( rgbGen, alphaGen ); @@ -470,9 +464,6 @@ void UpdateSurfaceDataSkybox( uint32_t* materials, Material& material, drawSurf_ // u_AlphaThreshold gl_skyboxShaderMaterial->SetUniform_AlphaTest( GLS_ATEST_NONE ); - // u_InverseLightFactor - gl_skyboxShaderMaterial->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - gl_skyboxShaderMaterial->WriteUniformsToBuffer( materials ); } @@ -620,9 +611,6 @@ void UpdateSurfaceDataFog( uint32_t* materials, Material& material, drawSurf_t* const fog_t* fog = material.fog; - // u_InverseLightFactor - gl_fogQuake3ShaderMaterial->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - // u_Color gl_fogQuake3ShaderMaterial->SetUniform_Color( fog->color ); diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index 620af3155a..64923fa81d 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -2210,7 +2210,6 @@ GLShader_generic::GLShader_generic( GLShaderManager *manager ) : u_AlphaThreshold( this ), u_ModelMatrix( this ), u_ModelViewProjectionMatrix( this ), - u_InverseLightFactor( this ), u_ColorModulate( this ), u_Color( this ), u_Bones( this ), @@ -2243,7 +2242,6 @@ GLShader_genericMaterial::GLShader_genericMaterial( GLShaderManager* manager ) : u_AlphaThreshold( this ), u_ModelMatrix( this ), u_ModelViewProjectionMatrix( this ), - u_InverseLightFactor( this ), u_ColorModulate( this ), u_Color( this ), u_DepthScale( this ), @@ -2285,7 +2283,7 @@ GLShader_lightMapping::GLShader_lightMapping( GLShaderManager *manager ) : u_ViewOrigin( this ), u_ModelMatrix( this ), u_ModelViewProjectionMatrix( this ), - u_InverseLightFactor( this ), + u_LightFactor( this ), u_Bones( this ), u_VertexInterpolation( this ), u_ReliefDepthScale( this ), @@ -2354,7 +2352,7 @@ GLShader_lightMappingMaterial::GLShader_lightMappingMaterial( GLShaderManager* m u_ViewOrigin( this ), u_ModelMatrix( this ), u_ModelViewProjectionMatrix( this ), - u_InverseLightFactor( this ), + u_LightFactor( this ), u_ReliefDepthScale( this ), u_ReliefOffsetBias( this ), u_NormalScale( this ), @@ -2413,7 +2411,6 @@ GLShader_forwardLighting_omniXYZ::GLShader_forwardLighting_omniXYZ( GLShaderMana u_ViewOrigin( this ), u_LightOrigin( this ), u_LightColor( this ), - u_InverseLightFactor( this ), u_LightRadius( this ), u_LightScale( this ), u_LightAttenuationMatrix( this ), @@ -2467,7 +2464,6 @@ GLShader_forwardLighting_projXYZ::GLShader_forwardLighting_projXYZ( GLShaderMana u_ViewOrigin( this ), u_LightOrigin( this ), u_LightColor( this ), - u_InverseLightFactor( this ), u_LightRadius( this ), u_LightScale( this ), u_LightAttenuationMatrix( this ), @@ -2532,7 +2528,6 @@ GLShader_forwardLighting_directionalSun::GLShader_forwardLighting_directionalSun u_ViewOrigin( this ), u_LightDir( this ), u_LightColor( this ), - u_InverseLightFactor( this ), u_LightRadius( this ), u_LightScale( this ), u_LightAttenuationMatrix( this ), @@ -2622,7 +2617,6 @@ GLShader_reflection::GLShader_reflection( GLShaderManager *manager ): u_NormalScale( this ), u_VertexInterpolation( this ), u_CameraPosition( this ), - u_InverseLightFactor( this ), GLDeformStage( this ), GLCompileMacro_USE_VERTEX_SKINNING( this ), GLCompileMacro_USE_VERTEX_ANIMATION( this ), @@ -2651,7 +2645,6 @@ GLShader_reflectionMaterial::GLShader_reflectionMaterial( GLShaderManager* manag u_ReliefOffsetBias( this ), u_NormalScale( this ), u_CameraPosition( this ), - u_InverseLightFactor( this ), GLDeformStage( this ), GLCompileMacro_USE_HEIGHTMAP_IN_NORMALMAP( this ), GLCompileMacro_USE_RELIEF_MAPPING( this ) { @@ -2673,8 +2666,7 @@ GLShader_skybox::GLShader_skybox( GLShaderManager *manager ) : u_UseCloudMap( this ), u_AlphaThreshold( this ), u_ModelMatrix( this ), - u_ModelViewProjectionMatrix( this ), - u_InverseLightFactor( this ) + u_ModelViewProjectionMatrix( this ) { } @@ -2694,9 +2686,8 @@ GLShader_skyboxMaterial::GLShader_skyboxMaterial( GLShaderManager* manager ) : u_UseCloudMap( this ), u_AlphaThreshold( this ), u_ModelMatrix( this ), - u_ModelViewProjectionMatrix( this ), - u_InverseLightFactor( this ) { -} + u_ModelViewProjectionMatrix( this ) +{} void GLShader_skyboxMaterial::SetShaderProgramUniforms( shaderProgram_t* shaderProgram ) { glUniform1i( glGetUniformLocation( shaderProgram->program, "u_ColorMap" ), 0 ); @@ -2708,7 +2699,6 @@ GLShader_fogQuake3::GLShader_fogQuake3( GLShaderManager *manager ) : u_FogMap( this ), u_ModelMatrix( this ), u_ModelViewProjectionMatrix( this ), - u_InverseLightFactor( this ), u_Color( this ), u_Bones( this ), u_VertexInterpolation( this ), @@ -2731,7 +2721,6 @@ GLShader_fogQuake3Material::GLShader_fogQuake3Material( GLShaderManager* manager u_FogMap( this ), u_ModelMatrix( this ), u_ModelViewProjectionMatrix( this ), - u_InverseLightFactor( this ), u_Color( this ), u_FogDistanceVector( this ), u_FogDepthVector( this ), @@ -2751,7 +2740,6 @@ GLShader_fogGlobal::GLShader_fogGlobal( GLShaderManager *manager ) : u_ViewMatrix( this ), u_ModelViewProjectionMatrix( this ), u_UnprojectMatrix( this ), - u_InverseLightFactor( this ), u_Color( this ), u_FogDistanceVector( this ), u_FogDepthVector( this ) @@ -2861,8 +2849,7 @@ void GLShader_portal::SetShaderProgramUniforms( shaderProgram_t *shaderProgram ) GLShader_contrast::GLShader_contrast( GLShaderManager *manager ) : GLShader( "contrast", ATTR_POSITION, manager ), u_ColorMap( this ), - u_ModelViewProjectionMatrix( this ), - u_InverseLightFactor( this ) + u_ModelViewProjectionMatrix( this ) { } @@ -2878,7 +2865,6 @@ GLShader_cameraEffects::GLShader_cameraEffects( GLShaderManager *manager ) : u_ColorModulate( this ), u_TextureMatrix( this ), u_ModelViewProjectionMatrix( this ), - u_LightFactor( this ), u_DeformMagnitude( this ), u_InverseGamma( this ) { diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index fff592e99e..507aeab4ac 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -2150,21 +2150,6 @@ class u_LightFactor : } }; -class u_InverseLightFactor : - GLUniform1f -{ -public: - u_InverseLightFactor( GLShader *shader ) : - GLUniform1f( shader, "u_InverseLightFactor" ) - { - } - - void SetUniform_InverseLightFactor( const float inverseLightFactor ) - { - this->SetValue( inverseLightFactor ); - } -}; - class u_ColorMap : GLUniformSampler2D { public: @@ -3617,7 +3602,7 @@ class u_ColorModulate : { this->SetValue( v ); } - void SetUniform_ColorModulate( colorGen_t colorGen, alphaGen_t alphaGen ) + void SetUniform_ColorModulate( colorGen_t colorGen, alphaGen_t alphaGen, bool vertexOverbright = false ) { vec4_t v; bool needAttrib = false; @@ -3631,7 +3616,16 @@ class u_ColorModulate : { case colorGen_t::CGEN_VERTEX: needAttrib = true; - VectorSet( v, 1, 1, 1 ); + if ( vertexOverbright ) + { + // vertexOverbright is only needed for non-lightmapped cases. When there is a + // lightmap, this is done by multiplying with the overbright-scaled white image + VectorSet( v, tr.mapLightFactor, tr.mapLightFactor, tr.mapLightFactor ); + } + else + { + VectorSet( v, 1, 1, 1 ); + } break; case colorGen_t::CGEN_ONE_MINUS_VERTEX: @@ -3946,7 +3940,6 @@ class GLShader_generic : public u_AlphaThreshold, public u_ModelMatrix, public u_ModelViewProjectionMatrix, - public u_InverseLightFactor, public u_ColorModulate, public u_Color, public u_Bones, @@ -3976,7 +3969,6 @@ class GLShader_genericMaterial : public u_AlphaThreshold, public u_ModelMatrix, public u_ModelViewProjectionMatrix, - public u_InverseLightFactor, public u_ColorModulate, public u_Color, public u_DepthScale, @@ -4015,7 +4007,7 @@ class GLShader_lightMapping : public u_ViewOrigin, public u_ModelMatrix, public u_ModelViewProjectionMatrix, - public u_InverseLightFactor, + public u_LightFactor, public u_Bones, public u_VertexInterpolation, public u_ReliefDepthScale, @@ -4067,7 +4059,7 @@ class GLShader_lightMappingMaterial : public u_ViewOrigin, public u_ModelMatrix, public u_ModelViewProjectionMatrix, - public u_InverseLightFactor, + public u_LightFactor, public u_ReliefDepthScale, public u_ReliefOffsetBias, public u_NormalScale, @@ -4113,7 +4105,6 @@ class GLShader_forwardLighting_omniXYZ : public u_ViewOrigin, public u_LightOrigin, public u_LightColor, - public u_InverseLightFactor, public u_LightRadius, public u_LightScale, public u_LightAttenuationMatrix, @@ -4157,7 +4148,6 @@ class GLShader_forwardLighting_projXYZ : public u_ViewOrigin, public u_LightOrigin, public u_LightColor, - public u_InverseLightFactor, public u_LightRadius, public u_LightScale, public u_LightAttenuationMatrix, @@ -4208,7 +4198,6 @@ class GLShader_forwardLighting_directionalSun : public u_ViewOrigin, public u_LightDir, public u_LightColor, - public u_InverseLightFactor, public u_LightRadius, public u_LightScale, public u_LightAttenuationMatrix, @@ -4275,7 +4264,6 @@ class GLShader_reflection : public u_NormalScale, public u_VertexInterpolation, public u_CameraPosition, - public u_InverseLightFactor, public GLDeformStage, public GLCompileMacro_USE_VERTEX_SKINNING, public GLCompileMacro_USE_VERTEX_ANIMATION, @@ -4300,7 +4288,6 @@ class GLShader_reflectionMaterial : public u_ReliefOffsetBias, public u_NormalScale, public u_CameraPosition, - public u_InverseLightFactor, public GLDeformStage, public GLCompileMacro_USE_HEIGHTMAP_IN_NORMALMAP, public GLCompileMacro_USE_RELIEF_MAPPING { @@ -4319,8 +4306,7 @@ class GLShader_skybox : public u_UseCloudMap, public u_AlphaThreshold, public u_ModelMatrix, - public u_ModelViewProjectionMatrix, - public u_InverseLightFactor + public u_ModelViewProjectionMatrix { public: GLShader_skybox( GLShaderManager *manager ); @@ -4337,8 +4323,7 @@ class GLShader_skyboxMaterial : public u_UseCloudMap, public u_AlphaThreshold, public u_ModelMatrix, - public u_ModelViewProjectionMatrix, - public u_InverseLightFactor { + public u_ModelViewProjectionMatrix { public: GLShader_skyboxMaterial( GLShaderManager* manager ); void SetShaderProgramUniforms( shaderProgram_t* shaderProgram ) override; @@ -4349,7 +4334,6 @@ class GLShader_fogQuake3 : public u_FogMap, public u_ModelMatrix, public u_ModelViewProjectionMatrix, - public u_InverseLightFactor, public u_Color, public u_Bones, public u_VertexInterpolation, @@ -4370,7 +4354,6 @@ class GLShader_fogQuake3Material : public u_FogMap, public u_ModelMatrix, public u_ModelViewProjectionMatrix, - public u_InverseLightFactor, public u_Color, public u_FogDistanceVector, public u_FogDepthVector, @@ -4389,7 +4372,6 @@ class GLShader_fogGlobal : public u_ViewMatrix, public u_ModelViewProjectionMatrix, public u_UnprojectMatrix, - public u_InverseLightFactor, public u_Color, public u_FogDistanceVector, public u_FogDepthVector @@ -4484,8 +4466,7 @@ class GLShader_portal : class GLShader_contrast : public GLShader, public u_ColorMap, - public u_ModelViewProjectionMatrix, - public u_InverseLightFactor + public u_ModelViewProjectionMatrix { public: GLShader_contrast( GLShaderManager *manager ); @@ -4499,7 +4480,6 @@ class GLShader_cameraEffects : public u_ColorModulate, public u_TextureMatrix, public u_ModelViewProjectionMatrix, - public u_LightFactor, public u_DeformMagnitude, public u_InverseGamma { diff --git a/src/engine/renderer/glsl_source/cameraEffects_fp.glsl b/src/engine/renderer/glsl_source/cameraEffects_fp.glsl index 9e70baafb3..e58b37bbd9 100644 --- a/src/engine/renderer/glsl_source/cameraEffects_fp.glsl +++ b/src/engine/renderer/glsl_source/cameraEffects_fp.glsl @@ -28,8 +28,6 @@ uniform sampler2D u_CurrentMap; uniform sampler3D u_ColorMap3D; #endif -uniform float u_LightFactor; - uniform vec4 u_ColorModulate; uniform float u_InverseGamma; @@ -44,8 +42,6 @@ void main() vec4 color = texture2D(u_CurrentMap, st); - color.rgb *= u_LightFactor; - color = clamp(color, 0.0, 1.0); #if defined(r_colorGrading) diff --git a/src/engine/renderer/glsl_source/computeLight_fp.glsl b/src/engine/renderer/glsl_source/computeLight_fp.glsl index d9e8eb76b6..b36c132d39 100644 --- a/src/engine/renderer/glsl_source/computeLight_fp.glsl +++ b/src/engine/renderer/glsl_source/computeLight_fp.glsl @@ -23,6 +23,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define COMPUTELIGHT_GLSL +uniform float u_LightFactor; + #if !defined(USE_BSP_SURFACE) #define USE_MODEL_SURFACE #endif @@ -55,6 +57,8 @@ vec4 EnvironmentalSpecularFactor( vec3 viewDir, vec3 normal ) float directedScale = 2.0 - ambientScale; ambientColor = ambientScale * texel.rgb; lightColor = directedScale * texel.rgb; + ambientColor *= u_LightFactor; + lightColor *= u_LightFactor; } #endif diff --git a/src/engine/renderer/glsl_source/contrast_fp.glsl b/src/engine/renderer/glsl_source/contrast_fp.glsl index 7c06cd7a8f..ef74cf594b 100644 --- a/src/engine/renderer/glsl_source/contrast_fp.glsl +++ b/src/engine/renderer/glsl_source/contrast_fp.glsl @@ -24,8 +24,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA uniform sampler2D u_ColorMap; -uniform float u_InverseLightFactor; - const vec4 LUMINANCE_VECTOR = vec4(0.2125, 0.7154, 0.0721, 0.0); #if __VERSION__ > 120 @@ -59,7 +57,5 @@ void main() color += f(texture2D(u_ColorMap, st + vec2(1.0, 1.0) * scale)); color *= 0.25; - color.rgb *= u_InverseLightFactor; - outputColor = color; } diff --git a/src/engine/renderer/glsl_source/fogGlobal_fp.glsl b/src/engine/renderer/glsl_source/fogGlobal_fp.glsl index 2151f5b1b9..ad05524a9a 100644 --- a/src/engine/renderer/glsl_source/fogGlobal_fp.glsl +++ b/src/engine/renderer/glsl_source/fogGlobal_fp.glsl @@ -25,7 +25,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA uniform sampler2D u_ColorMap; // fog texture uniform sampler2D u_DepthMap; -uniform float u_InverseLightFactor; uniform vec3 u_ViewOrigin; uniform vec4 u_FogDistanceVector; uniform vec4 u_FogDepthVector; @@ -56,7 +55,5 @@ void main() vec4 color = texture2D(u_ColorMap, st); - color.rgb *= u_InverseLightFactor; - outputColor = u_Color * color; } diff --git a/src/engine/renderer/glsl_source/fogQuake3_fp.glsl b/src/engine/renderer/glsl_source/fogQuake3_fp.glsl index 459658a4de..ab31ca9fb3 100644 --- a/src/engine/renderer/glsl_source/fogQuake3_fp.glsl +++ b/src/engine/renderer/glsl_source/fogQuake3_fp.glsl @@ -26,7 +26,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA uniform sampler2D u_FogMap; -uniform float u_InverseLightFactor; IN(smooth) vec3 var_Position; IN(smooth) vec2 var_TexCoords; IN(smooth) vec4 var_Color; @@ -41,8 +40,6 @@ void main() color *= var_Color; - color.rgb *= u_InverseLightFactor; - outputColor = color; #if 0 diff --git a/src/engine/renderer/glsl_source/forwardLighting_fp.glsl b/src/engine/renderer/glsl_source/forwardLighting_fp.glsl index 8cdff5ea10..1021815f2b 100644 --- a/src/engine/renderer/glsl_source/forwardLighting_fp.glsl +++ b/src/engine/renderer/glsl_source/forwardLighting_fp.glsl @@ -22,7 +22,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA /* forwardLighting_fp.glsl */ +// computeSpecularity is the only thing used from this file #insert computeLight_fp + #insert reliefMapping_fp /* swizzle one- and two-component textures to RG */ @@ -68,7 +70,6 @@ uniform vec3 u_LightDir; uniform vec3 u_LightOrigin; #endif uniform vec3 u_LightColor; -uniform float u_InverseLightFactor; uniform float u_LightRadius; uniform float u_LightScale; uniform float u_AlphaThreshold; @@ -1015,7 +1016,6 @@ void main() color.rgb *= attenuationZ; #endif color.rgb *= abs(u_LightScale); - color.rgb *= u_InverseLightFactor; color.rgb *= shadow; color.rgb *= var_Color.rgb; diff --git a/src/engine/renderer/glsl_source/generic_fp.glsl b/src/engine/renderer/glsl_source/generic_fp.glsl index 85f3f1d1fd..2c4b5c4f9c 100644 --- a/src/engine/renderer/glsl_source/generic_fp.glsl +++ b/src/engine/renderer/glsl_source/generic_fp.glsl @@ -27,10 +27,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA uniform sampler2D u_ColorMap; uniform float u_AlphaThreshold; -#if !defined(GENERIC_2D) - uniform float u_InverseLightFactor; -#endif - #if defined(USE_MATERIAL_SYSTEM) uniform bool u_ShowTris; uniform vec3 u_MaterialColour; @@ -74,10 +70,6 @@ void main() #endif color *= var_Color; - -#if !defined(GENERIC_2D) - color.rgb *= u_InverseLightFactor; -#endif SHADER_PROFILER_SET( color ) @@ -92,9 +84,5 @@ void main() outputColor = vec4(0.0, 0.0, 0.0, 0.0); #elif defined(USE_MATERIAL_SYSTEM) && defined(r_showGlobalMaterials) outputColor.rgb = u_MaterialColour; - - #if !defined(GENERIC_2D) && !defined(USE_DEPTH_FADE) - outputColor.rgb *= u_InverseLightFactor; - #endif #endif } diff --git a/src/engine/renderer/glsl_source/lightMapping_fp.glsl b/src/engine/renderer/glsl_source/lightMapping_fp.glsl index 8ec26659e4..bd9ce97f19 100644 --- a/src/engine/renderer/glsl_source/lightMapping_fp.glsl +++ b/src/engine/renderer/glsl_source/lightMapping_fp.glsl @@ -32,7 +32,6 @@ uniform sampler2D u_MaterialMap; uniform sampler2D u_GlowMap; uniform float u_AlphaThreshold; -uniform float u_InverseLightFactor; uniform vec3 u_ViewOrigin; IN(smooth) vec3 var_Position; @@ -144,7 +143,10 @@ void main() #if defined(USE_LIGHT_MAPPING) // Compute light color from world space lightmap. + // When doing vertex lighting with full-range overbright, this reads out + // 1< 0 ) - { - color.rgb *= u_InverseLightFactor; - } - #if defined(r_glowMapping) // Blend glow map. vec3 glow = texture2D(u_GlowMap, texCoords).rgb; - /* HACK: use sign to know if there is a light or not, and - then if it will receive overbright multiplication or not. */ - if ( u_InverseLightFactor < 0 ) - { - glow *= - u_InverseLightFactor; - } - color.rgb += glow; #endif @@ -247,13 +235,6 @@ void main() vec4 envColor1 = textureCube(u_EnvironmentMap1, reflect(-viewDir, normal)); outputColor = vec4( mix(envColor0, envColor1, u_EnvironmentInterpolation).rgb, 1.0 ); - - /* HACK: use sign to know if there is a light or not, and - then if it will receive overbright multiplication or not. */ - if ( u_InverseLightFactor < 0 ) - { - outputColor *= - u_InverseLightFactor; - } #elif defined(r_showVertexColors) /* We need to keep the texture alpha channel so impact marks like creep don't fully overwrite the world texture. */ @@ -265,12 +246,5 @@ void main() #endif #elif defined(USE_MATERIAL_SYSTEM) && defined(r_showGlobalMaterials) outputColor.rgb = u_MaterialColour + lightColor.rgb * u_MaterialColour; - - /* HACK: use sign to know if there is a light or not, and - then if it will receive overbright multiplication or not. */ - if ( u_InverseLightFactor < 0 ) - { - outputColor *= - u_InverseLightFactor; - } #endif } diff --git a/src/engine/renderer/glsl_source/reflection_CB_fp.glsl b/src/engine/renderer/glsl_source/reflection_CB_fp.glsl index 1943185880..298d79ac44 100644 --- a/src/engine/renderer/glsl_source/reflection_CB_fp.glsl +++ b/src/engine/renderer/glsl_source/reflection_CB_fp.glsl @@ -30,8 +30,6 @@ uniform samplerCube u_ColorMapCube; uniform vec3 u_ViewOrigin; uniform mat4 u_ModelMatrix; -uniform float u_InverseLightFactor; - IN(smooth) vec3 var_Position; IN(smooth) vec2 var_TexCoords; IN(smooth) vec4 var_Tangent; @@ -73,8 +71,6 @@ void main() #if defined(r_showCubeProbes) viewDir = normalize(var_Position); outputColor = textureCube(u_ColorMapCube, viewDir); - - outputColor.rgb *= u_InverseLightFactor; #endif // outputColor = vec4(1.0, 0.0, 0.0, 1.0); } diff --git a/src/engine/renderer/glsl_source/shaderProfiler_fp.glsl b/src/engine/renderer/glsl_source/shaderProfiler_fp.glsl index 32883bbf6a..aaf4fd7202 100644 --- a/src/engine/renderer/glsl_source/shaderProfiler_fp.glsl +++ b/src/engine/renderer/glsl_source/shaderProfiler_fp.glsl @@ -51,13 +51,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. color += vec4( count < 0.5 ? count + 0.5 : 0.0, count >= 0.5 ? count : 0.0, 0.0, 1.0 ); - - /* HACK: use sign to know if there is a light or not, and - then if it will receive overbright multiplication or not. */ - if ( u_InverseLightFactor < 0 ) - { - color *= -u_InverseLightFactor; - } } } #else diff --git a/src/engine/renderer/glsl_source/skybox_fp.glsl b/src/engine/renderer/glsl_source/skybox_fp.glsl index c900e69512..13f0fa2477 100644 --- a/src/engine/renderer/glsl_source/skybox_fp.glsl +++ b/src/engine/renderer/glsl_source/skybox_fp.glsl @@ -28,7 +28,6 @@ const float radiusWorld = 4096.0; // Value used by quake 3 skybox code uniform samplerCube u_ColorMapCube; -uniform float u_InverseLightFactor; uniform sampler2D u_CloudMap; uniform bool u_UseCloudMap; @@ -77,7 +76,5 @@ void main() return; } - color.rgb *= u_InverseLightFactor; - outputColor = color; } diff --git a/src/engine/renderer/tr_backend.cpp b/src/engine/renderer/tr_backend.cpp index 2676ae4eab..d6029e8794 100644 --- a/src/engine/renderer/tr_backend.cpp +++ b/src/engine/renderer/tr_backend.cpp @@ -1921,7 +1921,6 @@ static void RB_SetupLightForLighting( trRefLight_t *light ) gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX ); gl_genericShader->SetUniform_Color( Color::Black ); - // TODO: set u_InverseLightFactor! GL_State( GLS_POLYMODE_LINE | GLS_DEPTHTEST_DISABLE ); GL_Cull( cullType_t::CT_TWO_SIDED ); @@ -2774,7 +2773,6 @@ void RB_RunVisTests( ) gl_genericShader->SetUniform_Color( Color::White ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_CONST, alphaGen_t::AGEN_CONST ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); gl_genericShader->SetUniform_ModelMatrix( backEnd.orientation.transformMatrix ); gl_genericShader->SetUniform_ModelViewProjectionMatrix( glState.modelViewProjectionMatrix[ glState.stackIndex ] ); @@ -2980,9 +2978,6 @@ void RB_RenderGlobalFog() gl_fogGlobalShader->SetUniform_ViewOrigin( backEnd.viewParms.orientation.origin ); // world space - // u_InverseLightFactor - gl_fogGlobalShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - { fog_t *fog; @@ -3077,9 +3072,6 @@ void RB_RenderBloom() // render contrast downscaled to 1/4th of the screen gl_contrastShader->BindProgram( 0 ); - // u_InverseLightFactor - gl_contrastShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - gl_contrastShader->SetUniform_ColorMapBindless( GL_BindToTMU( 0, tr.currentRenderImage[backEnd.currentMainFBO] ) ); @@ -3240,7 +3232,7 @@ void RB_RenderSSAO() if ( r_ssao->integer < 0 ) { // clear the screen to show only SSAO - GL_ClearColor( tr.mapInverseLightFactor, tr.mapInverseLightFactor, tr.mapInverseLightFactor, 1.0 ); + GL_ClearColor( 1.0, 1.0, 1.0, 1.0 ); glClear( GL_COLOR_BUFFER_BIT ); } @@ -3354,9 +3346,6 @@ void RB_CameraPostFX() // enable shader, set arrays gl_cameraEffectsShader->BindProgram( 0 ); - // u_LightFactor - gl_cameraEffectsShader->SetUniform_LightFactor( tr.mapLightFactor ); - gl_cameraEffectsShader->SetUniform_ColorModulate( backEnd.viewParms.gradingWeights ); gl_cameraEffectsShader->SetUniform_InverseGamma( 1.0 / r_gamma->value ); @@ -3410,7 +3399,6 @@ static void RB_RenderDebugUtils() // set uniforms gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_CUSTOM_RGB, alphaGen_t::AGEN_CUSTOM ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); // bind u_ColorMap gl_genericShader->SetUniform_ColorMapBindless( @@ -3553,7 +3541,6 @@ static void RB_RenderDebugUtils() gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX ); gl_genericShader->SetUniform_Color( Color::Black ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); // bind u_ColorMap gl_genericShader->SetUniform_ColorMapBindless( @@ -3669,7 +3656,6 @@ static void RB_RenderDebugUtils() gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX ); gl_genericShader->SetUniform_Color( Color::Black ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); // bind u_ColorMap gl_genericShader->SetUniform_ColorMapBindless( @@ -3735,7 +3721,6 @@ static void RB_RenderDebugUtils() gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX ); gl_genericShader->SetUniform_Color( Color::Black ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); // bind u_ColorMap gl_genericShader->SetUniform_ColorMapBindless( @@ -3949,7 +3934,6 @@ static void RB_RenderDebugUtils() // set uniforms gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_CUSTOM_RGB, alphaGen_t::AGEN_CUSTOM ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); // bind u_ColorMap gl_genericShader->SetUniform_ColorMapBindless( @@ -4027,8 +4011,6 @@ static void RB_RenderDebugUtils() gl_reflectionShader->SetUniform_ModelMatrix( backEnd.orientation.transformMatrix ); gl_reflectionShader->SetUniform_ModelViewProjectionMatrix( glState.modelViewProjectionMatrix[ glState.stackIndex ] ); - gl_reflectionShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - if ( r_showCubeProbes.Get() == Util::ordinal( showCubeProbesMode::GRID ) ) { // Debug rendering can be really slow here for ( auto it = tr.cubeProbeGrid.begin(); it != tr.cubeProbeGrid.end(); it++ ) { @@ -4086,7 +4068,6 @@ static void RB_RenderDebugUtils() gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX ); gl_genericShader->SetUniform_Color( Color::Black ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); GL_State( GLS_DEFAULT ); GL_Cull( cullType_t::CT_TWO_SIDED ); @@ -4169,7 +4150,6 @@ static void RB_RenderDebugUtils() gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX ); gl_genericShader->SetUniform_Color( Color::Black ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); GL_State( GLS_DEFAULT ); GL_Cull( cullType_t::CT_TWO_SIDED ); @@ -4260,7 +4240,6 @@ static void RB_RenderDebugUtils() // set uniforms gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_CUSTOM_RGB, alphaGen_t::AGEN_CUSTOM ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); // bind u_ColorMap gl_genericShader->SetUniform_ColorMapBindless( @@ -4560,7 +4539,6 @@ void DebugDrawBegin( debugDrawMode_t mode, float size ) { gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX ); gl_genericShader->SetUniform_Color( colorClear ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); // bind u_ColorMap gl_genericShader->SetUniform_ColorMapBindless( @@ -5681,7 +5659,6 @@ void RB_ShowImages() gl_genericShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_VERTEX, alphaGen_t::AGEN_VERTEX ); gl_genericShader->SetUniform_TextureMatrix( matrixIdentity ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); GL_SelectTexture( 0 ); diff --git a/src/engine/renderer/tr_bsp.cpp b/src/engine/renderer/tr_bsp.cpp index 46c28cb617..a997ced291 100644 --- a/src/engine/renderer/tr_bsp.cpp +++ b/src/engine/renderer/tr_bsp.cpp @@ -5112,7 +5112,6 @@ void RE_LoadWorldMap( const char *name ) tr.modelLight = lightMode_t::FULLBRIGHT; tr.modelDeluxe = deluxeMode_t::NONE; tr.mapLightFactor = 1.0f; - tr.mapInverseLightFactor = 1.0f; // Use fullbright lighting for everything if the world is fullbright. if ( tr.worldLight != lightMode_t::FULLBRIGHT ) @@ -5189,7 +5188,6 @@ void RE_LoadWorldMap( const char *name ) if ( !tr.legacyOverBrightClamping && tr.lightMode != lightMode_t::FULLBRIGHT ) { tr.mapLightFactor = pow( 2, tr.mapOverBrightBits ); - tr.mapInverseLightFactor = 1.0f / tr.mapLightFactor; } tr.worldLoaded = true; diff --git a/src/engine/renderer/tr_image.cpp b/src/engine/renderer/tr_image.cpp index 41bc26b0f9..7f7db93b3e 100644 --- a/src/engine/renderer/tr_image.cpp +++ b/src/engine/renderer/tr_image.cpp @@ -2587,13 +2587,19 @@ static void R_CreateCurrentRenderImage() if ( r_highPrecisionRendering.Get() ) { - if ( !glConfig2.textureRGBA16BlendAvailable ) + if ( !glConfig2.textureFloatAvailable ) { - Log::Warn( "High-precision current render disabled because RGBA16 framebuffer blending is not available" ); + Log::Warn( "High-precision current render disabled because RGBA16F framebuffer is not available" ); } else { - imageParams.bits |= IF_RGBA16; + // Use float color buffer so that we can store intermediate results of a multi-stage + // shader which are greater than 1. For example, the sum of multiple lightmaps from + // a light style, or simply a single overbright-scaled lightmap which we did not + // manage to collapse with the diffuse. + // Besides preventing clamping of the color buffer itself, using a float color buffer + // also prevents the fragment shader's output color from being clamped before blending. + imageParams.bits |= IF_RGBA16F; } } diff --git a/src/engine/renderer/tr_local.h b/src/engine/renderer/tr_local.h index 6162bb9743..9350907f6f 100644 --- a/src/engine/renderer/tr_local.h +++ b/src/engine/renderer/tr_local.h @@ -1075,8 +1075,6 @@ enum class shaderProfilerRenderSubGroupsMode { bool dpMaterial; - bool cancelOverBright; - // Core renderer (code path for when only OpenGL Core is available, or compatible OpenGL 2). stageRenderer_t colorRenderer; @@ -2769,8 +2767,6 @@ enum class shaderProfilerRenderSubGroupsMode { int mapOverBrightBits; // pow(2, mapOverbrightBits) float mapLightFactor; - // 1 / mapLightFactor - float mapInverseLightFactor; // May have to be true on some legacy maps: clamp and normalize multiplied colors. bool legacyOverBrightClamping; diff --git a/src/engine/renderer/tr_scene.cpp b/src/engine/renderer/tr_scene.cpp index 8e66bec87d..818835811f 100644 --- a/src/engine/renderer/tr_scene.cpp +++ b/src/engine/renderer/tr_scene.cpp @@ -335,12 +335,6 @@ void RE_AddDynamicLightToSceneET( const vec3_t org, float radius, float intensit light->l.color[ 1 ] = g; light->l.color[ 2 ] = b; - if ( r_realtimeLightingRenderer.Get() == Util::ordinal( realtimeLightingRenderer_t::TILED ) ) - { - // Cancel overBright on dynamic lights. - VectorScale( light->l.color, tr.mapInverseLightFactor, light->l.color ); - } - light->l.inverseShadows = (flags & REF_INVERSE_DLIGHT) != 0; light->l.noShadows = !r_realtimeLightingCastShadows->integer && !light->l.inverseShadows; diff --git a/src/engine/renderer/tr_shade.cpp b/src/engine/renderer/tr_shade.cpp index fd6b01de69..3bff3e2fa4 100644 --- a/src/engine/renderer/tr_shade.cpp +++ b/src/engine/renderer/tr_shade.cpp @@ -693,7 +693,6 @@ static void DrawTris() } gl_genericShader->SetUniform_ColorModulate( colorGen_t::CGEN_CONST, alphaGen_t::AGEN_CONST ); - gl_genericShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); gl_genericShader->SetUniform_ModelMatrix( backEnd.orientation.transformMatrix ); gl_genericShader->SetUniform_ModelViewProjectionMatrix( glState.modelViewProjectionMatrix[ glState.stackIndex ] ); @@ -921,15 +920,15 @@ void Render_generic3D( shaderStage_t *pStage ) // u_AlphaThreshold gl_genericShader->SetUniform_AlphaTest( pStage->stateBits ); - // u_InverseLightFactor - float inverseLightFactor = pStage->cancelOverBright ? tr.mapInverseLightFactor : 1.0f; - gl_genericShader->SetUniform_InverseLightFactor( inverseLightFactor ); - // u_ColorModulate colorGen_t rgbGen = SetRgbGen( pStage ); alphaGen_t alphaGen = SetAlphaGen( pStage ); - gl_genericShader->SetUniform_ColorModulate( rgbGen, alphaGen ); + // Here, it's safe to multiply the overbright factor for vertex lighting into the color gen` + // since the `generic` fragment shader only takes a single input color. `lightMapping` on the + // hand needs to know the real diffuse color, hence the separate u_LightFactor. + bool mayUseVertexOverbright = pStage->type == stageType_t::ST_COLORMAP && tess.bspSurface; + gl_genericShader->SetUniform_ColorModulate( rgbGen, alphaGen, mayUseVertexOverbright ); // u_Color gl_genericShader->SetUniform_Color( tess.svars.color ); @@ -1125,12 +1124,9 @@ void Render_lightMapping( shaderStage_t *pStage ) // u_DeformGen gl_lightMappingShader->SetUniform_Time( backEnd.refdef.floatTime - backEnd.currentEntity->e.shaderTime ); - // u_InverseLightFactor - /* HACK: use sign to know if there is a light or not, and - then if it will receive overbright multiplication or not. */ - bool cancelOverBright = pStage->cancelOverBright; - float inverseLightFactor = cancelOverBright ? tr.mapInverseLightFactor : -tr.mapInverseLightFactor; - gl_lightMappingShader->SetUniform_InverseLightFactor( inverseLightFactor ); + // u_LightFactor + gl_lightMappingShader->SetUniform_LightFactor( + lightMode == lightMode_t::FULLBRIGHT ? 1.0f : tr.mapLightFactor ); // u_ColorModulate gl_lightMappingShader->SetUniform_ColorModulate( rgbGen, alphaGen ); @@ -1418,9 +1414,6 @@ static void Render_forwardLighting_DBS_omni( shaderStage_t *pStage, // u_AlphaThreshold gl_forwardLightingShader_omniXYZ->SetUniform_AlphaTest( pStage->stateBits ); - // u_InverseLightFactor - gl_forwardLightingShader_omniXYZ->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - // bind u_HeightMap if ( pStage->enableReliefMapping ) { @@ -1596,9 +1589,6 @@ static void Render_forwardLighting_DBS_proj( shaderStage_t *pStage, // u_AlphaThreshold gl_forwardLightingShader_projXYZ->SetUniform_AlphaTest( pStage->stateBits ); - // u_InverseLightFactor - gl_forwardLightingShader_projXYZ->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - // bind u_HeightMap if ( pStage->enableReliefMapping ) { @@ -1775,9 +1765,6 @@ static void Render_forwardLighting_DBS_directional( shaderStage_t *pStage, trRef // u_AlphaThreshold gl_forwardLightingShader_directionalSun->SetUniform_AlphaTest( pStage->stateBits ); - // u_InverseLightFactor - gl_forwardLightingShader_directionalSun->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - // bind u_HeightMap if ( pStage->enableReliefMapping ) { @@ -2069,9 +2056,6 @@ void Render_skybox( shaderStage_t *pStage ) // u_AlphaThreshold gl_skyboxShader->SetUniform_AlphaTest( GLS_ATEST_NONE ); - // u_InverseLightFactor - gl_skyboxShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - gl_skyboxShader->SetRequiredVertexPointers(); Tess_DrawElements(); @@ -2397,9 +2381,6 @@ void Render_fog( shaderStage_t* pStage ) gl_fogQuake3Shader->BindProgram( 0 ); - // u_InverseLightFactor - gl_fogQuake3Shader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - gl_fogQuake3Shader->SetUniform_FogDistanceVector( fogDistanceVector ); gl_fogQuake3Shader->SetUniform_FogDepthVector( fogDepthVector ); gl_fogQuake3Shader->SetUniform_FogEyeT( eyeT ); @@ -2589,6 +2570,11 @@ void Tess_ComputeColor( shaderStage_t *pStage ) } } + if ( pStage->type == stageType_t::ST_STYLELIGHTMAP || pStage->type == stageType_t::ST_STYLECOLORMAP ) + { + tess.svars.color *= tr.mapLightFactor; + } + // alphaGen switch ( pStage->alphaGen ) { diff --git a/src/engine/renderer/tr_shader.cpp b/src/engine/renderer/tr_shader.cpp index 15cc90fe5e..e6b91c1960 100644 --- a/src/engine/renderer/tr_shader.cpp +++ b/src/engine/renderer/tr_shader.cpp @@ -5174,7 +5174,6 @@ static void CollapseStages() // Make shader stages ready to be used by renderer functions. static void FinishStages() { - bool shaderHasNoLight = true; bool lightStageFound = false; /* Skip standalone lightmaps, they are assumed to be buggy, @@ -5221,22 +5220,15 @@ static void FinishStages() stage->active = glConfig2.reflectionMappingAvailable; break; - case stageType_t::ST_STYLELIGHTMAP: - case stageType_t::ST_STYLECOLORMAP: - shaderHasNoLight = false; - break; - case stageType_t::ST_LIGHTMAP: // standalone lightmap stage: paint shadows over a white texture stage->bundle[ TB_DIFFUSEMAP ].image[ 0 ] = tr.whiteImage; lightStageFound = true; - shaderHasNoLight = false; break; case stageType_t::ST_DIFFUSEMAP: case stageType_t::ST_COLLAPSE_DIFFUSEMAP: lightStageFound = true; - shaderHasNoLight = false; break; case stageType_t::ST_ATTENUATIONMAP_XY: @@ -5255,58 +5247,12 @@ static void FinishStages() ? gl_shaderManager.getDeformShaderIndex( shader.deforms, shader.numDeforms ) : 0; - bool isOpaqueShader = false; - for ( size_t s = 0; s < numStages; s++ ) { shaderStage_t *stage = &stages[ s ]; stage->deformIndex = deformIndex; - // SRC1 and DST0 are reset to zero in ParseStage (no blending). - bool isOpaque = !( stage->stateBits & ( GLS_SRCBLEND_BITS | GLS_DSTBLEND_BITS ) ); - - // A shader is not opaque if all stages are not opaques. - isOpaqueShader |= isOpaque; - - if ( shaderHasNoLight ) - { - bool blendFunc_srcDstColor = ( stage->stateBits & GLS_SRCBLEND_BITS ) == GLS_SRCBLEND_DST_COLOR; - - // We should cancel overbright if there is no light stage, unless it's using blendFunc dst_color. - stage->cancelOverBright = !blendFunc_srcDstColor; - - bool isDecal = shader.sort == Util::ordinal(shaderSort_t::SS_DECAL); - - if ( isDecal ) - { - // We should not cancel overbright if that's a non-opaque decal. - stage->cancelOverBright = isOpaque; - } - } - else - { - if ( isOpaqueShader ) - { - // We we should not cancel overbright if the light stage is applied on an opaque surface; - stage->cancelOverBright = false; - } - else - { - bool blendFunc_add = ( stage->stateBits & GLS_SRCBLEND_BITS ) == GLS_SRCBLEND_ONE - && ( stage->stateBits & GLS_DSTBLEND_BITS ) == GLS_DSTBLEND_ONE; - - if ( blendFunc_add ) - { - stage->cancelOverBright = true; - } - else - { - stage->cancelOverBright = false; - } - } - } - // Available textures. bool hasNormalMap = stage->bundle[ TB_NORMALMAP ].image[ 0 ] != nullptr; bool hasHeightMap = stage->bundle[ TB_HEIGHTMAP ].image[ 0 ] != nullptr; diff --git a/src/engine/renderer/tr_sky.cpp b/src/engine/renderer/tr_sky.cpp index 1c5a580960..de1c39eb4f 100644 --- a/src/engine/renderer/tr_sky.cpp +++ b/src/engine/renderer/tr_sky.cpp @@ -102,9 +102,6 @@ void Tess_StageIteratorSky() gl_skyboxShader->SetUniform_ModelViewProjectionMatrix( glState.modelViewProjectionMatrix[glState.stackIndex] ); - // u_InverseLightFactor - gl_skyboxShader->SetUniform_InverseLightFactor( tr.mapInverseLightFactor ); - gl_skyboxShader->SetRequiredVertexPointers(); // draw the outer skybox