diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index 0526d2c5aa..d0e1012360 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -2834,7 +2834,7 @@ GLShader_cameraEffects::GLShader_cameraEffects() : u_SRGB( this ), u_Tonemap( this ), u_TonemapParms( this ), - u_TonemapExposure( this ), + u_Exposure( this ), u_InverseGamma( this ) { } @@ -3095,5 +3095,5 @@ GlobalUBOProxy::GlobalUBOProxy() : u_InverseGamma( this ), u_Tonemap( this ), u_TonemapParms( this ), - u_TonemapExposure( this ) { + u_Exposure( this ) { } \ No newline at end of file diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index 8a62521d5f..f6fe35dc65 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -2815,15 +2815,15 @@ class u_TonemapParms : } }; -class u_TonemapExposure : +class u_Exposure : GLUniform1f { public: - u_TonemapExposure( GLShader* shader ) : - GLUniform1f( shader, "u_TonemapExposure", FRAME ) { + u_Exposure( GLShader* shader ) : + GLUniform1f( shader, "u_Exposure", FRAME ) { } - void SetUniform_TonemapExposure( float tonemapExposure ) { - this->SetValue( tonemapExposure ); + void SetUniform_Exposure( float exposure ) { + this->SetValue( exposure ); } }; @@ -3290,7 +3290,7 @@ class GLShader_cameraEffects : public u_SRGB, public u_Tonemap, public u_TonemapParms, - public u_TonemapExposure, + public u_Exposure, public u_InverseGamma { public: @@ -3520,7 +3520,7 @@ class GlobalUBOProxy : public u_InverseGamma, public u_Tonemap, public u_TonemapParms, - public u_TonemapExposure { + public u_Exposure { public: GlobalUBOProxy(); diff --git a/src/engine/renderer/glsl_source/cameraEffects_fp.glsl b/src/engine/renderer/glsl_source/cameraEffects_fp.glsl index d5ed53ecb2..cfc557a35f 100644 --- a/src/engine/renderer/glsl_source/cameraEffects_fp.glsl +++ b/src/engine/renderer/glsl_source/cameraEffects_fp.glsl @@ -62,7 +62,7 @@ z: shoulderClip w: highlightsCompression */ uniform bool u_Tonemap; uniform vec4 u_TonemapParms; -uniform float u_TonemapExposure; +uniform float u_Exposure; vec3 TonemapLottes( vec3 color ) { // Lottes 2016, "Advanced Techniques and Optimization of HDR Color Pipelines" @@ -88,9 +88,11 @@ void main() convertToSRGB( color.rgb ); } + color.rgb *= u_Exposure; + #if defined(r_highPrecisionRendering) && defined(HAVE_ARB_texture_float) if( u_Tonemap ) { - color.rgb = TonemapLottes( color.rgb * u_TonemapExposure ); + color.rgb = TonemapLottes( color.rgb ); } #endif diff --git a/src/engine/renderer/tr_backend.cpp b/src/engine/renderer/tr_backend.cpp index 18795fec41..983c92e842 100644 --- a/src/engine/renderer/tr_backend.cpp +++ b/src/engine/renderer/tr_backend.cpp @@ -1737,6 +1737,7 @@ void RB_CameraPostFX() { gl_cameraEffectsShader->SetUniform_InverseGamma( 1.0 / r_gamma->value ); gl_cameraEffectsShader->SetUniform_SRGB( tr.worldLinearizeTexture ); + gl_cameraEffectsShader->SetUniform_Exposure( r_toneMappingExposure.Get() ); const bool tonemap = r_toneMapping.Get() && r_highPrecisionRendering.Get() && glConfig.textureFloatAvailable; if ( tonemap ) { @@ -1744,7 +1745,6 @@ void RB_CameraPostFX() { ComputeTonemapParams( tonemapParms[0], tonemapParms[1], r_toneMappingHDRMax.Get(), r_toneMappingDarkAreaPointHDR.Get(), r_toneMappingDarkAreaPointLDR.Get(), tonemapParms[2], tonemapParms[3] ); gl_cameraEffectsShader->SetUniform_TonemapParms( tonemapParms ); - gl_cameraEffectsShader->SetUniform_TonemapExposure( r_toneMappingExposure.Get() ); } gl_cameraEffectsShader->SetUniform_Tonemap( tonemap ); @@ -2889,6 +2889,7 @@ static void SetFrameUniforms() { globalUBOProxy->SetUniform_ColorModulate( tr.viewParms.gradingWeights ); globalUBOProxy->SetUniform_InverseGamma( 1.0f / r_gamma->value ); + globalUBOProxy->SetUniform_Exposure( r_toneMappingExposure.Get() ); const bool tonemap = r_toneMapping.Get() && r_highPrecisionRendering.Get() && glConfig.textureFloatAvailable; if ( tonemap ) { @@ -2896,7 +2897,6 @@ static void SetFrameUniforms() { ComputeTonemapParams( tonemapParms[0], tonemapParms[1], r_toneMappingHDRMax.Get(), r_toneMappingDarkAreaPointHDR.Get(), r_toneMappingDarkAreaPointLDR.Get(), tonemapParms[2], tonemapParms[3] ); globalUBOProxy->SetUniform_TonemapParms( tonemapParms ); - globalUBOProxy->SetUniform_TonemapExposure( r_toneMappingExposure.Get() ); } globalUBOProxy->SetUniform_Tonemap( tonemap ); diff --git a/src/engine/renderer/tr_init.cpp b/src/engine/renderer/tr_init.cpp index bbe2fb2db1..5a151bb412 100644 --- a/src/engine/renderer/tr_init.cpp +++ b/src/engine/renderer/tr_init.cpp @@ -186,8 +186,9 @@ Cvar::Cvar r_rendererAPI( "r_rendererAPI", "Renderer API: 0: OpenGL, 1: Vul Cvar::Cvar r_toneMapping( "r_toneMapping", "Use HDR->LDR tonemapping", Cvar::NONE, true ); + // TODO(0.56): rename because it can be used without tone mapping now Cvar::Cvar r_toneMappingExposure( - "r_toneMappingExposure", "Tonemap exposure", Cvar::NONE, 1.0f ); + "r_toneMappingExposure", "exposure (brightness adjustment)", Cvar::NONE, 1.0f ); Cvar::Range> r_toneMappingContrast( "r_toneMappingContrast", "Makes dark areas light up faster", Cvar::NONE, 1.6f, 1.0f, 10.0f );