1 vec4 RGBtoHSL(in vec4 o) {
\r
2 float MAX = max(max(o.r, o.g), o.b);
\r
3 float MIN = min(min(o.r, o.g), o.b);
\r
5 if(MAX==MIN) { h=0.0; }
\r
6 else if(o.r>o.g && o.r>o.b){h=60.0*(o.g-o.b)/(MAX-MIN)+360.0;}
\r
7 else if(o.g>o.b){h=60.0*(o.b-o.r)/(MAX-MIN)+120.0;}
\r
8 else {h=60.0*(o.r-o.g)/(MAX-MIN)+240.0;}
\r
9 float s, l=0.5*(MAX+MIN);
\r
10 if(MAX==MIN){s=0.0;} else if(l<=0.5){s=(MAX-MIN)/(2.0*l);} else {s=(MAX-MIN)/(2.0-2.0*l);}
\r
11 return vec4(h, s, l, o.a);
\r
13 vec4 HSLtoRGB(in vec4 o) {
\r
14 float q = (o[2]<0.5) ? o[2]*(1.0+o[1]) : o[2]+o[1]-(o[2]*o[1]);
\r
15 float p = 2.0*o[2] - q;
\r
16 float hk = o[0]/360.0;
\r
17 vec4 ret; vec3 t; t.r = hk+1.0/3.0, t.g = hk, t.b = hk-1.0/3.0;
\r
18 for(int i=0; i<3; i++) {
\r
19 if(t[i]<0.0) t[i]+=1.0; if(t[i]>1.0) t[i]-=1.0;
\r
20 if(t[i]<1.0/6.0){ ret[i]=p+((q-p)*6.0*t[i]); }
\r
21 else if(t[i]<0.5){ ret[i]=q; }
\r
22 else if(t[i]<2.0/3.0){ ret[i]=p+((q-p)*6.0*(2.0/3.0-t[i])); }
\r
29 in float dh, ds, dl;
\r
31 vec4 hsl = RGBtoHSL(getPix());
\r
32 hsl[0] = mod(hsl[0]+dh/2.0/PI*360.0, 360.0);
\r