vo_opengl: Make approx-gamma affect OSD/sub

Close #837

Signed-off-by: wm4 <wm4@nowhere>
This commit is contained in:
Niklas Haas 2014-06-06 14:56:59 +02:00 committed by wm4
parent 664f8e9832
commit 856b57e418
2 changed files with 8 additions and 4 deletions

View File

@ -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

View File

@ -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,