forked from mirrors/0ad
25df2d8a02
Also fixes sky shader as it was writing negative values for -Y direction.
35 lines
916 B
C#
35 lines
916 B
C#
#version 430
|
|
|
|
#include "common/compute.h"
|
|
|
|
BEGIN_DRAW_TEXTURES
|
|
TEXTURE_2D(0, inTex)
|
|
END_DRAW_TEXTURES
|
|
|
|
BEGIN_DRAW_UNIFORMS
|
|
UNIFORM(vec4, screenSize)
|
|
// Premultiplied exposure, already contains 2^exposure.
|
|
UNIFORM(float, exposure)
|
|
END_DRAW_UNIFORMS
|
|
|
|
STORAGE_2D(0, rgba8, outTex);
|
|
|
|
vec3 applyTonemapper(vec3 color)
|
|
{
|
|
float whitePoint = 10.0;
|
|
// Extendend Reinhard:
|
|
// https://www-old.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf
|
|
return color * (vec3(1.0) + color / (whitePoint * whitePoint)) / (vec3(1.0) + color);
|
|
}
|
|
|
|
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
|
void main()
|
|
{
|
|
ivec2 position = ivec2(gl_GlobalInvocationID.xy);
|
|
if (any(greaterThanEqual(position, ivec2(screenSize.xy))))
|
|
return;
|
|
vec3 hdrColor = texelFetch(GET_DRAW_TEXTURE_2D(inTex), position, 0).rgb;
|
|
vec3 sdrColor = applyTonemapper(hdrColor * exposure);
|
|
imageStore(outTex, position, vec4(sdrColor, 1.0));
|
|
}
|