Skip to content

Commit 8e25a56

Browse files
committed
Fix luminance overflow
1 parent bbd4fed commit 8e25a56

File tree

5 files changed

+16
-8
lines changed

5 files changed

+16
-8
lines changed

src/engine/renderer/gl_shader.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2835,7 +2835,7 @@ void GLShader_shadowFill::SetShaderProgramUniforms( ShaderProgramDescriptor *sha
28352835
glUniform1i( glGetUniformLocation( shaderProgram->id, "u_ColorMap" ), 0 );
28362836
}
28372837

2838-
GLShader_luminanceReduction::GLShader_luminanceReduction( GLShaderManager* manager ) :
2838+
GLShader_luminanceReduction::GLShader_luminanceReduction() :
28392839
GLShader( "luminanceReduction",
28402840
false, "luminanceReduction" ),
28412841
u_ViewWidth( this ),
@@ -2847,7 +2847,7 @@ void GLShader_luminanceReduction::SetShaderProgramUniforms( ShaderProgramDescrip
28472847
glUniform1i( glGetUniformLocation( shaderProgram->id, "initialRenderImage" ), 0 );
28482848
}
28492849

2850-
GLShader_clearFrameData::GLShader_clearFrameData( GLShaderManager* manager ) :
2850+
GLShader_clearFrameData::GLShader_clearFrameData() :
28512851
GLShader( "clearFrameData",
28522852
false, "clearFrameData" ) {
28532853
}
@@ -3115,6 +3115,7 @@ GLShader_cameraEffects::GLShader_cameraEffects() :
31153115
u_Tonemap( this ),
31163116
u_TonemapAdaptiveExposure( this ),
31173117
u_TonemapParms( this ),
3118+
u_TonemapParms2( this ),
31183119
u_TonemapExposure( this ),
31193120
u_InverseGamma( this ) {
31203121
}

src/engine/renderer/gl_shader.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4529,14 +4529,14 @@ class GLShader_luminanceReduction :
45294529
public u_ViewHeight,
45304530
public u_TonemapParms2 {
45314531
public:
4532-
GLShader_luminanceReduction( GLShaderManager* manager );
4532+
GLShader_luminanceReduction();
45334533
void SetShaderProgramUniforms( ShaderProgramDescriptor* shaderProgram ) override;
45344534
};
45354535

45364536
class GLShader_clearFrameData :
45374537
public GLShader {
45384538
public:
4539-
GLShader_clearFrameData( GLShaderManager* manager );
4539+
GLShader_clearFrameData();
45404540
};
45414541

45424542
class GLShader_reflection :
@@ -4756,6 +4756,7 @@ class GLShader_cameraEffects :
47564756
public u_Tonemap,
47574757
public u_TonemapAdaptiveExposure,
47584758
public u_TonemapParms,
4759+
public u_TonemapParms2,
47594760
public u_TonemapExposure,
47604761
public u_InverseGamma
47614762
{

src/engine/renderer/glsl_source/cameraEffects_fp.glsl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ y: highlightsCompressionSpeed
4444
z: shoulderClip
4545
w: highlightsCompression */
4646
uniform vec4 u_TonemapParms;
47+
uniform vec4 u_TonemapParms2;
4748
uniform float u_TonemapExposure;
4849

4950
vec3 TonemapLottes( vec3 color ) {
@@ -59,7 +60,7 @@ vec3 TonemapLottes( vec3 color ) {
5960
#endif
6061

6162
float GetAverageLuminance( const in uint luminance ) {
62-
return float( luminanceU ) / ( 256.0f * u_ViewWidth * u_ViewHeight );
63+
return float( luminanceU ) / ( u_TonemapParms2[1] * u_ViewWidth * u_ViewHeight );
6364
}
6465
#endif
6566

src/engine/renderer/glsl_source/luminanceReduction_cp.glsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ float ColorToLuminance( const in vec3 color ) {
6363
}
6464

6565
uint FloatLuminanceToUint( const in float luminance ) {
66-
return uint( luminance * 256 );
66+
return uint( luminance * u_TonemapParms2[1] );
6767
}
6868

6969
void main() {

src/engine/renderer/tr_backend.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3221,8 +3221,8 @@ static void AdaptiveLightingReduction() {
32213221

32223222
gl_luminanceReductionShader->BindProgram( 0 );
32233223

3224-
const int width = tr.currentRenderImage[backEnd.currentMainFBO]->width;
3225-
const int height = tr.currentRenderImage[backEnd.currentMainFBO]->height;
3224+
const int width = glConfig.vidWidth;
3225+
const int height = glConfig.vidHeight;
32263226

32273227
uint32_t globalWorkgroupX = ( width + 7 ) / 8;
32283228
uint32_t globalWorkgroupY = ( height + 7 ) / 8;
@@ -3232,6 +3232,7 @@ static void AdaptiveLightingReduction() {
32323232
gl_luminanceReductionShader->SetUniform_ViewWidth( width );
32333233
gl_luminanceReductionShader->SetUniform_ViewHeight( height );
32343234
vec4_t parms { log2f( r_toneMappingHDRMax.Get() ) };
3235+
parms[1] = UINT32_MAX / ( width * height * ( uint32_t( parms[0] ) + 8 ) );
32353236
gl_luminanceReductionShader->SetUniform_TonemapParms2( parms );
32363237

32373238
glMemoryBarrier( GL_ATOMIC_COUNTER_BARRIER_BIT );
@@ -3299,6 +3300,10 @@ void RB_CameraPostFX() {
32993300
r_toneMappingDarkAreaPointHDR.Get(), r_toneMappingDarkAreaPointLDR.Get(), tonemapParms[2], tonemapParms[3] );
33003301
gl_cameraEffectsShader->SetUniform_TonemapParms( tonemapParms );
33013302

3303+
vec4_t parms{ log2f( r_toneMappingHDRMax.Get() ) };
3304+
parms[1] = UINT32_MAX / ( glConfig.vidWidth * glConfig.vidHeight * ( uint32_t( parms[0] ) + 8 ) );
3305+
gl_cameraEffectsShader->SetUniform_TonemapParms2( parms );
3306+
33023307
gl_cameraEffectsShader->SetUniform_TonemapAdaptiveExposure(
33033308
glConfig2.adaptiveExposureAvailable && r_toneMappingAdaptiveExposure.Get() );
33043309
gl_cameraEffectsShader->SetUniform_TonemapExposure( r_toneMappingExposure.Get() );

0 commit comments

Comments
 (0)