uniform sampler2D tex; vec3 rgb2hsv(in vec3 rgb); vec3 hsv2rgb(in vec3 hsv); void main() { vec3 texel = texture2D(tex, gl_TexCoord[0].st).rgb; vec3 hsv = rgb2hsv(texel); vec3 rgb = hsv2rgb(hsv * vec3(0.97, 0.8, 0.9)); gl_FragColor = vec4(rgb, 1.0); } vec3 rgb2hsv(in vec3 rgb) { vec4 k = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec4 p = mix(vec4(rgb.bg, k.wz), vec4(rgb.gb, k.xy), step(rgb.b, rgb.g)); vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r)); float d = q.x - min(q.w, q.y); float e = 1.0e-10; return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); } vec3 hsv2rgb(in vec3 hsv) { vec3 rgb = clamp(abs(mod(hsv.x * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0 ); return hsv.z * mix(vec3(1.0), rgb, hsv.y); }