mirror of https://github.com/mpv-player/mpv
vo_opengl: remove pre/post/scale-shaders
Deprecated in favor of user-shaders, which are functionally equivalent but superior. (Except in the case of scaler-shader, which has no direct replacement, but it turned out to be a very unpopular feature either way - most custom scalers don't fit into the mpv kernel infrastructure and are therefore implemented as user shaders either way) Signed-off-by: wm4 <wm4@nowhere>
This commit is contained in:
parent
453fea87fa
commit
ce05413a87
|
@ -35,6 +35,8 @@ Interface changes
|
|||
- "idle" -> "idle-active"
|
||||
the old names are deprecated
|
||||
- remove deprecated "hwdec-active" and "hwdec-detected" properties
|
||||
- remove "pre-shaders", "post-shaders" and "scale-shader": deprecated
|
||||
in favor of "user-shaders"
|
||||
--- mpv 0.20.0 ---
|
||||
- add --image-display-duration option - this also means that image duration
|
||||
is not influenced by --mf-fps anymore in the general case (this is an
|
||||
|
|
|
@ -584,68 +584,9 @@ Available video output drivers are:
|
|||
better than without it) since it will extend the size to match only the
|
||||
milder of the scale factors between the axes.
|
||||
|
||||
``pre-shaders=<files>``, ``post-shaders=<files>``, ``scale-shader=<file>``
|
||||
Custom GLSL fragment shaders.
|
||||
|
||||
pre-shaders (list)
|
||||
These get applied after conversion to RGB and before linearization
|
||||
and upscaling. Operates on non-linear RGB (same as input). This is
|
||||
the best place to put things like sharpen filters.
|
||||
scale-shader
|
||||
This gets used instead of scale/cscale when those options are set
|
||||
to ``custom``. The colorspace it operates on depends on the values
|
||||
of ``linear-scaling`` and ``sigmoid-upscaling``, so no assumptions
|
||||
should be made here.
|
||||
post-shaders (list)
|
||||
These get applied after upscaling and subtitle blending (when
|
||||
``blend-subtitles`` is enabled), but before color management.
|
||||
Operates on linear RGB if ``linear-scaling`` is in effect,
|
||||
otherwise non-linear RGB. This is the best place for colorspace
|
||||
transformations (eg. saturation mapping).
|
||||
|
||||
These files must define a function with the following signature::
|
||||
|
||||
vec4 sample_pixel(sampler2D tex, vec2 pos, vec2 tex_size)
|
||||
|
||||
(If there is no string ``sample_pixel`` in the shader script, it will
|
||||
use ``sample`` instead. This is a compatibility hack for older shader
|
||||
scripts, and is deprecated.)
|
||||
|
||||
The meanings of the parameters are as follows:
|
||||
|
||||
sampler2D tex
|
||||
The source texture for the shader.
|
||||
vec2 pos
|
||||
The position to be sampled, in coordinate space [0-1].
|
||||
vec2 tex_size
|
||||
The size of the texture, in pixels. This may differ from image_size,
|
||||
eg. for subsampled content or for post-shaders.
|
||||
|
||||
In addition to these parameters, the following uniforms are also
|
||||
globally available:
|
||||
|
||||
float random
|
||||
A random number in the range [0-1], different per frame.
|
||||
int frame
|
||||
A simple count of frames rendered, increases by one per frame and
|
||||
never resets (regardless of seeks).
|
||||
vec2 image_size
|
||||
The size in pixels of the input image.
|
||||
vec2 target_size
|
||||
The size in pixels of the visible part of the scaled (and possibly
|
||||
cropped) image.
|
||||
|
||||
For example, a shader that inverts the colors could look like this::
|
||||
|
||||
vec4 sample(sampler2D tex, vec2 pos, vec2 tex_size)
|
||||
{
|
||||
vec4 color = texture(tex, pos);
|
||||
return vec4(1.0 - color.rgb, color.a);
|
||||
}
|
||||
|
||||
``user-shaders=<files>``
|
||||
Custom GLSL hooks. These are similar to ``post-shaders`` etc., but more
|
||||
flexible: They can be injected at almost arbitrary points in the
|
||||
Custom GLSL hooks. These are a flexible way to add custom fragment
|
||||
shaders, which can be injected at almost arbitrary points in the
|
||||
rendering pipeline, and access all previous intermediate textures.
|
||||
|
||||
.. admonition:: Warning
|
||||
|
@ -738,8 +679,19 @@ Available video output drivers are:
|
|||
The raw bound texture itself. The use of this should be
|
||||
avoided unless absolutely necessary.
|
||||
|
||||
In addition, the global uniforms described in ``post-shaders`` are
|
||||
also available.
|
||||
In addition to these parameters, the following uniforms are also
|
||||
globally available:
|
||||
|
||||
float random
|
||||
A random number in the range [0-1], different per frame.
|
||||
int frame
|
||||
A simple count of frames rendered, increases by one per frame and
|
||||
never resets (regardless of seeks).
|
||||
vec2 image_size
|
||||
The size in pixels of the input image.
|
||||
vec2 target_size
|
||||
The size in pixels of the visible part of the scaled (and possibly
|
||||
cropped) image.
|
||||
|
||||
Internally, vo_opengl may generate any number of the following
|
||||
textures. Whenever a texture is rendered and saved by vo_opengl, all of
|
||||
|
|
|
@ -54,7 +54,6 @@ static const char *const fixed_scale_filters[] = {
|
|||
"bilinear",
|
||||
"bicubic_fast",
|
||||
"oversample",
|
||||
"custom",
|
||||
NULL
|
||||
};
|
||||
static const char *const fixed_tscale_filters[] = {
|
||||
|
@ -268,7 +267,6 @@ struct gl_video {
|
|||
bool hwdec_active;
|
||||
|
||||
bool dsi_warned;
|
||||
bool custom_shader_fn_warned;
|
||||
bool broken_frame; // temporary error state
|
||||
};
|
||||
|
||||
|
@ -436,9 +434,6 @@ const struct m_sub_options gl_video_conf = {
|
|||
({"no", BLEND_SUBS_NO},
|
||||
{"yes", BLEND_SUBS_YES},
|
||||
{"video", BLEND_SUBS_VIDEO})),
|
||||
OPT_STRING("scale-shader", scale_shader, 0),
|
||||
OPT_STRINGLIST("pre-shaders", pre_shaders, 0),
|
||||
OPT_STRINGLIST("post-shaders", post_shaders, 0),
|
||||
OPT_STRINGLIST("user-shaders", user_shaders, 0),
|
||||
OPT_FLAG("deband", deband, 0),
|
||||
OPT_SUBSTRUCT("deband", deband_opts, deband_conf, 0),
|
||||
|
@ -452,6 +447,9 @@ const struct m_sub_options gl_video_conf = {
|
|||
OPT_REMOVED("srgb", "use target-prim=bt709:target-trc=srgb instead"),
|
||||
OPT_REMOVED("source-shader", "use :deband to enable debanding"),
|
||||
OPT_REMOVED("prescale-luma", "use user shaders for prescaling"),
|
||||
OPT_REMOVED("scale-shader", "use user-shaders instead"),
|
||||
OPT_REMOVED("pre-shaders", "use user-shaders instead"),
|
||||
OPT_REMOVED("post-shaders", "use user-shaders instead"),
|
||||
|
||||
OPT_REPLACED("lscale", "scale"),
|
||||
OPT_REPLACED("lscale-down", "scale-down"),
|
||||
|
@ -1250,19 +1248,6 @@ static void load_shader(struct gl_video *p, struct bstr body)
|
|||
p->dst_rect.y1 - p->dst_rect.y0});
|
||||
}
|
||||
|
||||
static const char *get_custom_shader_fn(struct gl_video *p, const char *body)
|
||||
{
|
||||
if (!p->gl->es && strstr(body, "sample") && !strstr(body, "sample_pixel")) {
|
||||
if (!p->custom_shader_fn_warned) {
|
||||
MP_WARN(p, "sample() is deprecated in custom shaders. "
|
||||
"Use sample_pixel()\n");
|
||||
p->custom_shader_fn_warned = true;
|
||||
}
|
||||
return "sample";
|
||||
}
|
||||
return "sample_pixel";
|
||||
}
|
||||
|
||||
// Semantic equality
|
||||
static bool double_seq(double a, double b)
|
||||
{
|
||||
|
@ -1455,16 +1440,6 @@ static void pass_sample(struct gl_video *p, struct img_tex tex,
|
|||
pass_sample_bicubic_fast(p->sc);
|
||||
} else if (strcmp(name, "oversample") == 0) {
|
||||
pass_sample_oversample(p->sc, scaler, w, h);
|
||||
} else if (strcmp(name, "custom") == 0) {
|
||||
struct bstr body = load_cached_file(p, p->opts.scale_shader);
|
||||
if (body.start) {
|
||||
load_shader(p, body);
|
||||
const char *fn_name = get_custom_shader_fn(p, body.start);
|
||||
GLSLF("// custom scale-shader\n");
|
||||
GLSLF("color = %s(tex, pos, size);\n", fn_name);
|
||||
} else {
|
||||
p->opts.scale_shader = NULL;
|
||||
}
|
||||
} else if (scaler->kernel && scaler->kernel->polar) {
|
||||
pass_sample_polar(p->sc, scaler);
|
||||
} else if (scaler->kernel) {
|
||||
|
@ -1538,19 +1513,6 @@ static void unsharp_hook(struct gl_video *p, struct img_tex tex,
|
|||
pass_sample_unsharp(p->sc, p->opts.unsharp);
|
||||
}
|
||||
|
||||
static void user_hook_old(struct gl_video *p, struct img_tex tex,
|
||||
struct gl_transform *trans, void *priv)
|
||||
{
|
||||
const char *body = priv;
|
||||
assert(body);
|
||||
|
||||
GLSLHF("#define pixel_size HOOKED_pt\n");
|
||||
load_shader(p, bstr0(body));
|
||||
const char *fn_name = get_custom_shader_fn(p, body);
|
||||
GLSLF("// custom shader\n");
|
||||
GLSLF("color = %s(HOOKED_raw, HOOKED_pos, HOOKED_size);\n", fn_name);
|
||||
}
|
||||
|
||||
struct szexp_ctx {
|
||||
struct gl_video *p;
|
||||
struct img_tex tex;
|
||||
|
@ -1627,26 +1589,6 @@ static void user_hook_free(struct tex_hook *hook)
|
|||
talloc_free(hook->priv);
|
||||
}
|
||||
|
||||
static void pass_hook_user_shaders_old(struct gl_video *p, char *name,
|
||||
char **shaders)
|
||||
{
|
||||
assert(name);
|
||||
if (!shaders)
|
||||
return;
|
||||
|
||||
for (int n = 0; shaders[n] != NULL; n++) {
|
||||
char *body = load_cached_file(p, shaders[n]).start;
|
||||
if (body) {
|
||||
pass_add_hook(p, (struct tex_hook) {
|
||||
.hook_tex = name,
|
||||
.bind_tex = {"HOOKED"},
|
||||
.hook = user_hook_old,
|
||||
.priv = body,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void pass_hook_user_shaders(struct gl_video *p, char **shaders)
|
||||
{
|
||||
if (!shaders)
|
||||
|
@ -1698,8 +1640,6 @@ static void gl_video_setup_hooks(struct gl_video *p)
|
|||
});
|
||||
}
|
||||
|
||||
pass_hook_user_shaders_old(p, "MAIN", p->opts.pre_shaders);
|
||||
pass_hook_user_shaders_old(p, "SCALED", p->opts.post_shaders);
|
||||
pass_hook_user_shaders(p, p->opts.user_shaders);
|
||||
}
|
||||
|
||||
|
@ -2988,10 +2928,6 @@ static bool check_dumb_mode(struct gl_video *p)
|
|||
return false;
|
||||
}
|
||||
}
|
||||
if (o->pre_shaders && o->pre_shaders[0])
|
||||
return false;
|
||||
if (o->post_shaders && o->post_shaders[0])
|
||||
return false;
|
||||
if (o->user_shaders && o->user_shaders[0])
|
||||
return false;
|
||||
if (p->use_lut_3d)
|
||||
|
|
|
@ -130,9 +130,6 @@ struct gl_video_opts {
|
|||
int interpolation;
|
||||
float interpolation_threshold;
|
||||
int blend_subs;
|
||||
char *scale_shader;
|
||||
char **pre_shaders;
|
||||
char **post_shaders;
|
||||
char **user_shaders;
|
||||
int deband;
|
||||
struct deband_opts *deband_opts;
|
||||
|
|
Loading…
Reference in New Issue