+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);
+}