forked from joejulian/gio
8cec7e04eb
This change avoids the hard dependency on GPU support for sRGB encoded textures in the compute renderer. With this change and the previously added CPU fallback, Gio no longer rely on any GPU functionality outside the OpenGL ES 2.0 level. Fixes gio#49 Fixes gio#154 Fixes gio#97 Fixes gio#36 Fixes gio#172 Signed-off-by: Elias Naur <mail@eliasnaur.com>
33 lines
776 B
GLSL
33 lines
776 B
GLSL
#version 310 es
|
|
|
|
// SPDX-License-Identifier: Unlicense OR MIT
|
|
|
|
precision mediump float;
|
|
|
|
layout(binding = 0) uniform sampler2D tex;
|
|
|
|
layout(location = 0) in vec2 vUV;
|
|
|
|
layout(location = 0) out vec4 fragColor;
|
|
|
|
layout(binding=0) uniform Color {
|
|
// If emulateSRGB is set (!= 0), the input texels are sRGB encoded. We save the
|
|
// conversion step below, at the cost of texture filtering in sRGB space.
|
|
float emulateSRGB;
|
|
};
|
|
|
|
vec3 RGBtosRGB(vec3 rgb) {
|
|
bvec3 cutoff = greaterThanEqual(rgb, vec3(0.0031308));
|
|
vec3 below = vec3(12.92)*rgb;
|
|
vec3 above = vec3(1.055)*pow(rgb, vec3(0.41666)) - vec3(0.055);
|
|
return mix(below, above, cutoff);
|
|
}
|
|
|
|
void main() {
|
|
vec4 texel = texture(tex, vUV);
|
|
if (emulateSRGB == 0.0) {
|
|
texel.rgb = RGBtosRGB(texel.rgb);
|
|
}
|
|
fragColor = texel;
|
|
}
|