mpv-conf/shaders/saturate.glsl
2021-12-03 20:50:08 +08:00

45 lines
1,020 B
GLSL

//!DESC saturate
//!HOOK MAINPRESUB
//!BIND HOOKED
#define Brightness 0.0 // <-1.0==1.0> default 0.0
#define Contrast 1.0 // <0.0==10.0> default 1.0
#define Hue 0.0 // <-180.0==180.0> default 0.0
#define Saturation 1.1 // <0.0==10.0> default 1.0
#define PI 3.1415926535897932384626433832795
#define ymin (15 / 255.0)
const mat4 r2y = mat4(
0.299, -0.14713, 0.615, 0.000,
0.587, -0.28886, -0.51499, 0.000,
0.114, 0.436, -0.10001, 0.000,
0.000, 0.000, 0.000, 0.000
);
const mat4 y2r = mat4(
1.000, 1.000, 1.000, 0.000,
0.000, -0.39465, 2.03211, 0.000,
1.13983, -0.58060, 0.000, 0.000,
0.000, 0.000, 0.000, 0.000
);
const mat2 HueMatrix = mat2(
cos(Hue * PI / 180), -sin(Hue * PI / 180),
sin(Hue * PI / 180), cos(Hue * PI / 180)
);
#define Src(a,b) HOOKED_texOff(vec2(a,b))
vec4 hook()
{
vec4 c0 = Src(0,0);
c0 = r2y * c0;
c0.r = Contrast * (c0.r - ymin) + ymin + Brightness;
c0.gb = (HueMatrix * c0.gb) * Saturation;
c0 = y2r * c0;
return c0;
}