0 true #version 150 //OVE shader_name: Hue/Saturation/Brightness //OVE shader_description: ported from Olive 0.1 filters //OVE main_input_name: Input uniform sampler2D tex_in; //OVE name: hue //OVE type: FLOAT //OVE flag: NOT_CONNECTABLE //OVE default: 0 //OVE description: uniform float hue; //OVE name: saturation //OVE type: FLOAT //OVE flag: NOT_CONNECTABLE //OVE min: 0 //OVE default: 100 //OVE description: uniform float saturation; //OVE name: brightness //OVE type: FLOAT //OVE flag: NOT_CONNECTABLE //OVE min: 0 //OVE default: 100 uniform float brightness; //OVE end // pixel coordinates in range [0..1]x[0..1] in vec2 ove_texcoord; // output color out vec4 frag_color; vec3 rgb2hsv(vec3 c) { vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.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(vec3 c) { vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); } void main(void) { vec4 tex_color = texture(tex_in, ove_texcoord); vec3 hsv = rgb2hsv(tex_color.rgb); hsv.r += (hue/360.0); hsv.g *= (saturation*0.01); hsv.b *= (brightness*0.01); vec3 rgb = hsv2rgb(hsv); frag_color = vec4( rgb.r, rgb.g, rgb.b, tex_color.a ); } None 0 10 0 50 0 130 1897878212480 -1 -1 -1 -1 {114bacfc-96b2-4738-8074-4390bbdc9b71} {9b0707c3-5c71-4cab-aa76-ee5e663a000f} 0 -1.77976 0.0350877