#version 330 core out vec4 FragColor; in vec2 TexCoords; uniform sampler2D screenTexture; uniform sampler2D bloomTexture; uniform float bloomStrength = 0.0f; uniform float brightness = 0.0f; uniform float colorContrast = 0.0f; uniform float saturation = 1.0f; uniform float exposure = 1.0f; vec3 ACESFilm(vec3 x) { const float a = 2.51; const float b = 0.03; const float c = 2.43; const float d = 0.59; const float e = 0.14; return clamp((x * (a * x + b)) / (x * (c * x + d) + e), 0.0, 1.0); } void main() { // Added before tonemapping, while everything is still in HDR vec3 originalcolor = texture(screenTexture, TexCoords).rgb + texture(bloomTexture, TexCoords).rgb * bloomStrength; vec3 finalcolor = ACESFilm(originalcolor * exposure); const float gamma = 2.2; finalcolor = pow(finalcolor, vec3(1.0 / gamma)); finalcolor = mix(finalcolor,vec3(1.0f) - finalcolor,colorContrast); float average = (finalcolor[0]+finalcolor[1]+finalcolor[2])/3.0f; finalcolor = mix(vec3(average), finalcolor, saturation); FragColor = vec4(finalcolor,1.0f); }