mirror of https://github.com/mpv-player/mpv
vo_opengl: Make approx-gamma affect OSD/sub
Close #837 Signed-off-by: wm4 <wm4@nowhere>
This commit is contained in:
parent
664f8e9832
commit
856b57e418
|
@ -926,7 +926,10 @@ static void compile_shaders(struct gl_video *p)
|
|||
shader_def_opt(&header, "USE_ALPHA", p->has_alpha);
|
||||
|
||||
char *header_osd = talloc_strdup(tmp, header);
|
||||
shader_def_opt(&header_osd, "USE_OSD_LINEAR_CONV", use_cms);
|
||||
shader_def_opt(&header_osd, "USE_OSD_LINEAR_CONV_APPROX",
|
||||
use_cms && p->opts.approx_gamma);
|
||||
shader_def_opt(&header_osd, "USE_OSD_LINEAR_CONV_BT2020",
|
||||
use_cms && !p->opts.approx_gamma);
|
||||
shader_def_opt(&header_osd, "USE_OSD_CMS_MATRIX", use_cms_matrix);
|
||||
shader_def_opt(&header_osd, "USE_OSD_3DLUT", p->use_lut_3d);
|
||||
// 3DLUT overrides SRGB
|
||||
|
|
|
@ -88,13 +88,14 @@ void main() {
|
|||
gl_Position = vec4(position, 1);
|
||||
color = vertex_color;
|
||||
|
||||
#ifdef USE_OSD_LINEAR_CONV
|
||||
// Although we are not scaling in linear light, both 3DLUT and SRGB still
|
||||
// operate on linear light inputs so we have to convert to it before
|
||||
// either step can be applied.
|
||||
#ifdef USE_OSD_LINEAR_CONV_APPROX
|
||||
color.rgb = pow(color.rgb, vec3(1.95));
|
||||
#endif
|
||||
#ifdef USE_OSD_LINEAR_CONV_BT2020
|
||||
color.rgb = bt2020_expand(color.rgb);
|
||||
// NOTE: This always applies the true BT2020, maybe we need to use
|
||||
// approx-gamma here too?
|
||||
#endif
|
||||
#ifdef USE_OSD_CMS_MATRIX
|
||||
// Convert to the right target gamut first (to BT.709 for sRGB,
|
||||
|
|
Loading…
Reference in New Issue