Files
tenmon/shaders/image.frag
T

66 lines
1.8 KiB
GLSL

#version 330
uniform sampler2D qt_Texture0;
uniform vec3 mtf_param[3];
uniform vec2 unit_scale;
uniform bool bw;
uniform bool invert;
uniform bool srgb;
uniform bool false_color;
in vec2 qt_TexCoord0;
layout(location = 0) out vec4 color;
vec3 Linear2sRGB(vec3 color)
{
return mix(12.92 * color.rgb,
1.055 * pow(color, vec3(1.0 / 2.4)) - 0.055,
greaterThan(color, vec3(0.0031308)));
}
vec4 MTF(vec4 x, vec4 low, vec4 mid, vec4 high)
{
x = (x - low) / (high - low);
x = clamp(x, vec4(0.0), vec4(1.0));
return ((mid - 1) * x) / ((2 * mid - 1) * x - mid);
}
vec3 falsecolor(float color)
{
const vec3 pallete[] = vec3[](
vec3(1.0, 0.0, 1.0), //magneta
vec3(0.0, 0.0, 1.0), //blue
vec3(0.0, 1.0, 1.0), //cyan
vec3(0.0, 1.0, 0.0), //green
vec3(1.0, 1.0, 0.0), //yellow
vec3(1.0, 0.0, 0.0), vec3(1.0, 0.0, 0.0));//red
color *= 5.0;
int i = int(color);
return mix(pallete[i], pallete[i+1], fract(color));
}
vec3 checker()
{
vec2 pattern = fract(gl_FragCoord.xy * 0.0625) - 0.5;
return vec3(step(pattern.x * pattern.y, 0.0) * 0.25 + 0.25);
}
void main(void)
{
color = texture(qt_Texture0, qt_TexCoord0);
color.rgb = color.rgb * unit_scale.x + unit_scale.y;
if(bw)color = color.rrra;
color = MTF(color, vec4(mtf_param[0], 0.0), vec4(mtf_param[1], 0.5), vec4(mtf_param[2], 1.0));
if(false_color)color.rgb = falsecolor(color.r);
if(invert)color.rgb = vec3(1.0) - color.rgb;
color.rgb = mix(checker(), color.rgb, color.a);
if(srgb)color.rgb = Linear2sRGB(color.rgb);
if(any(lessThan(qt_TexCoord0, vec2(0.0))) || any(greaterThan(qt_TexCoord0, vec2(1.0))))
color = vec4(0.0, 0.0, 0.0, 1.0);
color.a = 1.0;
}