aboutsummaryrefslogtreecommitdiff
path: root/client/shaders/extract_bloom
diff options
context:
space:
mode:
Diffstat (limited to 'client/shaders/extract_bloom')
-rw-r--r--client/shaders/extract_bloom/opengl_fragment.glsl13
-rw-r--r--client/shaders/extract_bloom/opengl_vertex.glsl8
2 files changed, 15 insertions, 6 deletions
diff --git a/client/shaders/extract_bloom/opengl_fragment.glsl b/client/shaders/extract_bloom/opengl_fragment.glsl
index af320f9ab..45f5e9c6f 100644
--- a/client/shaders/extract_bloom/opengl_fragment.glsl
+++ b/client/shaders/extract_bloom/opengl_fragment.glsl
@@ -1,8 +1,12 @@
#define rendered texture0
+struct ExposureParams {
+ float compensationFactor;
+};
+
uniform sampler2D rendered;
-uniform mediump float exposureFactor;
uniform mediump float bloomStrength;
+uniform ExposureParams exposureParams;
#ifdef GL_ES
varying mediump vec2 varTexCoord;
@@ -10,6 +14,7 @@ varying mediump vec2 varTexCoord;
centroid varying vec2 varTexCoord;
#endif
+varying float exposure;
void main(void)
{
@@ -18,10 +23,6 @@ void main(void)
// translate to linear colorspace (approximate)
color = pow(color, vec3(2.2));
- // Scale colors by luminance to amplify bright colors
- // in SDR textures.
- float luminance = dot(color, vec3(0.213, 0.515, 0.072));
- luminance *= luminance;
- color *= luminance * exposureFactor * bloomStrength;
+ color *= pow(2., exposure) * exposureParams.compensationFactor * bloomStrength;
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 12692c296..479ae1079 100644
--- a/client/shaders/extract_bloom/opengl_vertex.glsl
+++ b/client/shaders/extract_bloom/opengl_vertex.glsl
@@ -1,11 +1,19 @@
+#define exposureMap texture1
+
+uniform sampler2D exposureMap;
+
#ifdef GL_ES
varying mediump vec2 varTexCoord;
#else
centroid varying vec2 varTexCoord;
#endif
+varying float exposure;
+
void main(void)
{
+ exposure = texture2D(exposureMap, vec2(0.5)).r;
+
varTexCoord.st = inTexCoord0.st;
gl_Position = inVertexPosition;
}