summaryrefslogtreecommitdiffstats
path: root/video/out/gl_video.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-09-19 16:55:56 +0200
committerwm4 <wm4@nowhere>2013-09-19 17:03:03 +0200
commit93feffad15fe68dc97278df9e6726135e31b6474 (patch)
tree7a487a30eedd5064bc09e7c3801d8db738867a84 /video/out/gl_video.c
parent69e272dad707aae1ae99dabdf45bb82d3bf7a905 (diff)
downloadmpv-93feffad15fe68dc97278df9e6726135e31b6474.tar.bz2
mpv-93feffad15fe68dc97278df9e6726135e31b6474.tar.xz
vo_opengl: blend alpha components by default
Improves display of images and video with alpha channel, especially if the transparent regions contain (supposed to be invisible) garbage color values.
Diffstat (limited to 'video/out/gl_video.c')
-rw-r--r--video/out/gl_video.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/video/out/gl_video.c b/video/out/gl_video.c
index ff5bbc7d47..21efc6dd56 100644
--- a/video/out/gl_video.c
+++ b/video/out/gl_video.c
@@ -271,6 +271,7 @@ static const struct gl_video_opts gl_video_opts_def = {
.scale_sep = 1,
.scalers = { "bilinear", "bilinear" },
.scaler_params = {NAN, NAN},
+ .alpha_mode = 2,
};
@@ -319,7 +320,10 @@ const struct m_sub_options gl_video_conf = {
({"auto", MP_CHROMA_AUTO},
{"center", MP_CHROMA_CENTER},
{"left", MP_CHROMA_LEFT})),
- OPT_FLAG("alpha", enable_alpha, 0),
+ OPT_CHOICE("alpha", alpha_mode, M_OPT_OPTIONAL_PARAM,
+ ({"no", 0},
+ {"yes", 1}, {"", 1},
+ {"blend", 2})),
{0}
},
.size = sizeof(struct gl_video_opts),
@@ -779,8 +783,8 @@ static void compile_shaders(struct gl_video *p)
shader_prelude, PRELUDE_END);
// Need to pass alpha through the whole chain. (Not needed for OSD shaders.)
- bool use_alpha = p->opts.enable_alpha && p->has_alpha;
- shader_def_opt(&header, "USE_ALPHA", use_alpha);
+ if (p->opts.alpha_mode == 1)
+ 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", p->opts.srgb &&
@@ -831,8 +835,10 @@ static void compile_shaders(struct gl_video *p)
shader_def_opt(&header_conv, "USE_INPUT_GAMMA", convert_input_gamma);
shader_def_opt(&header_conv, "USE_COLORMATRIX", !p->is_rgb);
shader_def_opt(&header_conv, "USE_CONV_GAMMA", convert_input_to_linear);
- if (use_alpha && p->plane_count > 3)
+ if (p->opts.alpha_mode > 0 && p->has_alpha && p->plane_count > 3)
shader_def(&header_conv, "USE_ALPHA_PLANE", "3");
+ if (p->opts.alpha_mode == 2 && p->has_alpha)
+ shader_def(&header_conv, "USE_ALPHA_BLEND", "1");
shader_def_opt(&header_final, "USE_LINEAR_CONV_INV", p->use_lut_3d);
shader_def_opt(&header_final, "USE_GAMMA_POW", p->opts.gamma);