Skip to content
Snippets Groups Projects
tonemapping.comp 649 B
#version 440

layout(set=0, binding=0, r11f_g11f_b10f)    uniform image2D inImage;
layout(set=0, binding=1, rgba8)             uniform image2D outImage;


layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;

void main(){

    if(any(greaterThanEqual(gl_GlobalInvocationID.xy, imageSize(inImage)))){
        return;
    }
    ivec2 uv            = ivec2(gl_GlobalInvocationID.xy);
    vec3 linearColor    = imageLoad(inImage, uv).rgb;
    vec3 tonemapped     = linearColor / (linearColor + 1); // reinhard tonemapping
    vec3 gammaCorrected = pow(tonemapped, vec3(1.f / 2.2f));
    imageStore(outImage, uv, vec4(gammaCorrected, 0.f));
}