#version 330 core

out float adaptedLum;

uniform sampler2D prev_lum_tex;
uniform sampler2D current_lum_tex;

uniform float osg_DeltaFrameTime;

// Higher values give faster eye adaptation times
const float TAU = 4.0;

void main()
{
    float prevLum = texelFetch(prev_lum_tex, ivec2(0), 0).r;
    float currentLum = exp2(textureLod(current_lum_tex, vec2(0.5), 10.0).r);
    adaptedLum = prevLum + (currentLum - prevLum) *
        (1.0 - exp(-osg_DeltaFrameTime * TAU));
}