From 4cd6b773bb5de2594c682ae7e5793c80ad6a22e6 Mon Sep 17 00:00:00 2001 From: x2048 Date: Fri, 10 Feb 2023 21:04:37 +0100 Subject: [PATCH] Fix no color values on bloom texture (#13197) Align meaning of 'exposure' variable across different stages Put 'exposure' variable behind ENABLE_AUTO_EXPOSURE --- client/shaders/extract_bloom/opengl_fragment.glsl | 11 +++++++++-- client/shaders/extract_bloom/opengl_vertex.glsl | 9 ++++++++- client/shaders/second_stage/opengl_fragment.glsl | 9 +++++++-- client/shaders/second_stage/opengl_vertex.glsl | 9 +++++---- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/client/shaders/extract_bloom/opengl_fragment.glsl b/client/shaders/extract_bloom/opengl_fragment.glsl index 45f5e9c6f..36671b06c 100644 --- a/client/shaders/extract_bloom/opengl_fragment.glsl +++ b/client/shaders/extract_bloom/opengl_fragment.glsl @@ -14,7 +14,9 @@ varying mediump vec2 varTexCoord; centroid varying vec2 varTexCoord; #endif -varying float exposure; +#ifdef ENABLE_AUTO_EXPOSURE +varying float exposure; // linear exposure factor, see vertex shader +#endif void main(void) { @@ -23,6 +25,11 @@ void main(void) // translate to linear colorspace (approximate) color = pow(color, vec3(2.2)); - color *= pow(2., exposure) * exposureParams.compensationFactor * bloomStrength; + color *= exposureParams.compensationFactor * bloomStrength; + +#ifdef ENABLE_AUTO_EXPOSURE + color *= exposure; +#endif + gl_FragColor = vec4(color, 1.0); // force full alpha to avoid holes in the image. } diff --git a/client/shaders/extract_bloom/opengl_vertex.glsl b/client/shaders/extract_bloom/opengl_vertex.glsl index 479ae1079..2fee884ba 100644 --- a/client/shaders/extract_bloom/opengl_vertex.glsl +++ b/client/shaders/extract_bloom/opengl_vertex.glsl @@ -1,18 +1,25 @@ +#ifdef ENABLE_AUTO_EXPOSURE #define exposureMap texture1 uniform sampler2D exposureMap; +varying float exposure; +#endif + #ifdef GL_ES varying mediump vec2 varTexCoord; #else centroid varying vec2 varTexCoord; #endif -varying float exposure; void main(void) { +#ifdef ENABLE_AUTO_EXPOSURE + // value in the texture is on a logarithtmic scale exposure = texture2D(exposureMap, vec2(0.5)).r; + exposure = pow(2., exposure); +#endif varTexCoord.st = inTexCoord0.st; gl_Position = inVertexPosition; diff --git a/client/shaders/second_stage/opengl_fragment.glsl b/client/shaders/second_stage/opengl_fragment.glsl index 2ff58aa42..ac83c34eb 100644 --- a/client/shaders/second_stage/opengl_fragment.glsl +++ b/client/shaders/second_stage/opengl_fragment.glsl @@ -18,7 +18,9 @@ varying mediump vec2 varTexCoord; centroid varying vec2 varTexCoord; #endif -varying float exposure; +#ifdef ENABLE_AUTO_EXPOSURE +varying float exposure; // linear exposure factor, see vertex shader +#endif #ifdef ENABLE_BLOOM @@ -87,7 +89,10 @@ void main(void) if (uv.x > 0.5 || uv.y > 0.5) #endif { - color.rgb *= exposure * exposureParams.compensationFactor; + color.rgb *= exposureParams.compensationFactor; +#ifdef ENABLE_AUTO_EXPOSURE + color.rgb *= exposure; +#endif } diff --git a/client/shaders/second_stage/opengl_vertex.glsl b/client/shaders/second_stage/opengl_vertex.glsl index 7c121f6d1..f74960ec2 100644 --- a/client/shaders/second_stage/opengl_vertex.glsl +++ b/client/shaders/second_stage/opengl_vertex.glsl @@ -1,22 +1,23 @@ +#ifdef ENABLE_AUTO_EXPOSURE #define exposureMap texture2 uniform sampler2D exposureMap; +varying float exposure; +#endif + #ifdef GL_ES varying mediump vec2 varTexCoord; #else centroid varying vec2 varTexCoord; #endif -varying float exposure; - void main(void) { #ifdef ENABLE_AUTO_EXPOSURE + // value in the texture is on a logarithtmic scale exposure = texture2D(exposureMap, vec2(0.5)).r; exposure = pow(2., exposure); -#else - exposure = 1.0; #endif varTexCoord.st = inTexCoord0.st;