|
|
|
@ -1,12 +1,7 @@ |
|
|
|
|
#extension GL_ARB_texture_multisample : enable |
|
|
|
|
#import "Common/ShaderLib/GLSLCompat.glsllib" |
|
|
|
|
#import "Common/ShaderLib/MultiSample.glsllib" |
|
|
|
|
|
|
|
|
|
uniform COLORTEXTURE m_Texture; |
|
|
|
|
uniform vec3 m_WhitePoint; |
|
|
|
|
|
|
|
|
|
varying vec2 texCoord; |
|
|
|
|
|
|
|
|
|
vec3 FilmicCurve(in vec3 x){ |
|
|
|
|
vec3 FilmicCurve(in vec3 x) { |
|
|
|
|
const float A = 0.22; |
|
|
|
|
const float B = 0.30; |
|
|
|
|
const float C = 0.10; |
|
|
|
@ -19,27 +14,40 @@ vec3 FilmicCurve(in vec3 x){ |
|
|
|
|
|
|
|
|
|
// whitePoint should be 11.2 |
|
|
|
|
|
|
|
|
|
vec3 ToneMap_Filmic(vec3 color, vec3 whitePoint){ |
|
|
|
|
vec3 ToneMap_Filmic(vec3 color, vec3 whitePoint) { |
|
|
|
|
return FilmicCurve(color) / FilmicCurve(whitePoint); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vec4 tonemap(int i) { |
|
|
|
|
|
|
|
|
|
vec4 texVal = fetchTextureSample(m_Texture, texCoord, i); |
|
|
|
|
vec3 toneMapped = ToneMap_Filmic(texVal.rgb, m_WhitePoint); |
|
|
|
|
|
|
|
|
|
return vec4(toneMapped, texVal.a); |
|
|
|
|
uniform vec3 m_WhitePoint; |
|
|
|
|
varying vec2 texCoord; |
|
|
|
|
|
|
|
|
|
#ifdef NUM_SAMPLES |
|
|
|
|
|
|
|
|
|
uniform sampler2DMS m_Texture; |
|
|
|
|
|
|
|
|
|
vec4 ToneMap_TextureFilmic() { |
|
|
|
|
ivec2 iTexC = ivec2(texCoord * vec2(textureSize(m_Texture))); |
|
|
|
|
vec4 color = vec4(0.0); |
|
|
|
|
for (int i = 0; i < NUM_SAMPLES; i++) { |
|
|
|
|
vec4 hdrColor = texelFetch(m_Texture, iTexC, i); |
|
|
|
|
vec3 ldrColor = FilmicCurve(hdrColor.rgb); |
|
|
|
|
color += vec4(ldrColor, hdrColor.a); |
|
|
|
|
} |
|
|
|
|
color.rgb /= FilmicCurve(m_WhitePoint); |
|
|
|
|
return color / float(NUM_SAMPLES); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
|
|
uniform sampler2D m_Texture; |
|
|
|
|
|
|
|
|
|
vec4 ToneMap_TextureFilmic() { |
|
|
|
|
vec4 texVal = texture2D(m_Texture, texCoord); |
|
|
|
|
return vec4(ToneMap_Filmic(texVal.rgb, m_WhitePoint), texVal.a); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
void main() { |
|
|
|
|
#ifdef RESOLVE_MS |
|
|
|
|
vec4 color = vec4(0.0); |
|
|
|
|
for (int i = 0; i < m_NumSamples; i++){ |
|
|
|
|
color += tonemap(i); |
|
|
|
|
} |
|
|
|
|
gl_FragColor = color / m_NumSamples; |
|
|
|
|
#else |
|
|
|
|
gl_FragColor = tonemap(0); |
|
|
|
|
#endif |
|
|
|
|
gl_FragColor = ToneMap_TextureFilmic(); |
|
|
|
|
} |
|
|
|
|