OSDN Git Service

a66a5a761a1f39b0781211a93ea91152da797b14
[android-x86/frameworks-base.git] / core / res / res / raw / color_fade_frag.frag
1 #extension GL_OES_EGL_image_external : require
2
3 precision mediump float;
4 uniform samplerExternalOES texUnit;
5 uniform float opacity;
6 uniform float saturation;
7 uniform float gamma;
8 varying vec2 UV;
9
10 vec3 rgb2hsl(vec3 rgb)
11 {
12     float e = 1.0e-7;
13
14     vec4 p = rgb.g < rgb.b ? vec4(rgb.bg, -1.0, 2.0 / 3.0) : vec4(rgb.gb, 0.0, -1.0 / 3.0);
15     vec4 q = rgb.r < p.x ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx);
16
17     float v = q.x;
18     float c = v - min(q.w, q.y);
19     float h = abs((q.w - q.y) / (6.0 * c + e) + q.z);
20     float l = v - c * 0.5;
21     float s = c / (1.0 - abs(2.0 * l - 1.0) + e);
22     return clamp(vec3(h, s, l), 0.0, 1.0);
23 }
24
25 vec3 hsl2rgb(vec3 hsl)
26 {
27     vec3 h = vec3(hsl.x * 6.0);
28     vec3 p = abs(h - vec3(3.0, 2.0, 4.0));
29     vec3 q = 2.0 - p;
30
31     vec3 rgb = clamp(vec3(p.x - 1.0, q.yz), 0.0, 1.0);
32     float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y;
33     return (rgb - vec3(0.5)) * c + hsl.z;
34 }
35
36 void main()
37 {
38     vec4 color = texture2D(texUnit, UV);
39     vec3 hsl = rgb2hsl(color.xyz);
40     vec3 rgb = pow(hsl2rgb(vec3(hsl.x, hsl.y * saturation, hsl.z * opacity)), vec3(gamma));
41     gl_FragColor = vec4(rgb, 1.0);
42 }