#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
uniform sampler2D InputTexture;

vec3 linearToSrgb(vec3 linearRGB) {
    linearRGB = max(linearRGB, vec3(0.0)); // Ensure non-negative input
    vec3 srgb = pow(linearRGB, vec3(1.0/2.4));
    srgb = mix(linearRGB * 12.92, srgb * 1.055 - 0.055, step(vec3(0.0031308), linearRGB));
    return clamp(srgb, 0.0, 1.0); // Clamp final output to display range
}

void main() {
    vec3 linearColor = texture(InputTexture, TexCoord).rgb;
    FragColor = vec4(linearToSrgb(linearColor), texture(InputTexture, TexCoord).a);
}