From aa2bdec26cf2544cffa4b2613086f226127e2ea8 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Thu, 6 Jul 2017 11:27:24 +0200 Subject: vo_opengl: also expose NAME_mul for user shaders This is exposed so that bjin/mpv-prescalers can use textureGatherOffset for performance. Since there are now quite a lot of parameters where it isn't quite clear why they're all defined, add a paragraph to the man page that explains them a bit. --- DOCS/man/options.rst | 8 ++++++++ video/out/opengl/video.c | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index 7e6199b5e3..2e48c51ffa 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -4274,10 +4274,18 @@ The following video options are currently all specific to ``--vo=opengl`` and to texture coordinates) vec2 NAME_pt The (unrotated) size of a single pixel, range [0,1]. + float NAME_mul + The coefficient that needs to be multiplied into the texture contents + in order to normalize it to the range [0,1]. sampler NAME_raw The raw bound texture itself. The use of this should be avoided unless absolutely necessary. + Normally, users should use either NAME_tex or NAME_texOff to read from the + texture. For some shaders however , it can be better for performance to do + custom sampling from NAME_raw, in which case care needs to be taken to + respect NAME_mul and NAME_rot. + In addition to these parameters, the following uniforms are also globally available: diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c index f2f5260c74..876da267a3 100644 --- a/video/out/opengl/video.c +++ b/video/out/opengl/video.c @@ -1171,10 +1171,11 @@ static void hook_prelude(struct gl_video *p, const char *name, int id, GLSLHF("#define %s_size texture_size%d\n", name, id); GLSLHF("#define %s_rot texture_rot%d\n", name, id); GLSLHF("#define %s_pt pixel_size%d\n", name, id); + GLSLHF("#define %s_mul %f\n", name, tex.multiplier); // Set up the sampling functions - GLSLHF("#define %s_tex(pos) (%f * vec4(texture(%s_raw, pos)).%s)\n", - name, tex.multiplier, name, get_tex_swizzle(&tex)); + GLSLHF("#define %s_tex(pos) (%s_mul * vec4(texture(%s_raw, pos)).%s)\n", + name, name, name, get_tex_swizzle(&tex)); // Since the extra matrix multiplication impacts performance, // skip it unless the texture was actually rotated -- cgit v1.2.3