diff options
author | wm4 <wm4@nowhere> | 2014-12-19 01:03:08 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-12-19 01:21:19 +0100 |
commit | a0051b9da28fb67cebae1fef322603ddb8f619f8 (patch) | |
tree | 206133468f186beb262e4a35d3462f06882df465 /video/out/gl_video_shaders.glsl | |
parent | fe35130ba9079c09c74a5f5334584f1ccca15e52 (diff) | |
download | mpv-a0051b9da28fb67cebae1fef322603ddb8f619f8.tar.bz2 mpv-a0051b9da28fb67cebae1fef322603ddb8f619f8.tar.xz |
vo_opengl: add GLES 2 support
Rather basic support. Almost nothing works, and even if it does, it's
bound to be inefficient (due to texture upload). This was tested with
the nVidia desktop binary drivers, which provide GLES 2 support only.
However, nVidia is not known to be very strict about OpenGL, and the
driver is very new too, so the vo_opengl code will have bugs too.
Diffstat (limited to 'video/out/gl_video_shaders.glsl')
-rw-r--r-- | video/out/gl_video_shaders.glsl | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/video/out/gl_video_shaders.glsl b/video/out/gl_video_shaders.glsl index 547d5cd621..937673b0c3 100644 --- a/video/out/gl_video_shaders.glsl +++ b/video/out/gl_video_shaders.glsl @@ -29,6 +29,12 @@ #ifdef GL_ES precision mediump float; +#define HAVE_3DTEX (__VERSION__ >= 300) +#define HAVE_ARRAYS (__VERSION__ >= 300) +#else +// Desktop GL +#define HAVE_3DTEX 1 +#define HAVE_ARRAYS 1 #endif // GLSL 1.20 compatibility layer @@ -88,7 +94,9 @@ vec3 bt2020_compand(vec3 v) uniform mat3 transform; uniform vec3 translation; +#if HAVE_3DTEX uniform sampler3D lut_3d; +#endif uniform mat3 cms_matrix; // transformation from file's gamut to bt.2020 in vec2 vertex_position; @@ -122,7 +130,7 @@ void main() { // and to BT.2020 for 3DLUT). Normal clamping here as perceptually // accurate colorimetry is probably not worth the performance trade-off // here. - color.rgb = clamp(cms_matrix * color.rgb, 0, 1); + color.rgb = clamp(cms_matrix * color.rgb, 0.0, 1.0); #endif #ifdef USE_OSD_3DLUT color.rgb = pow(color.rgb, vec3(1.0/2.4)); // linear -> 2.4 3DLUT space @@ -166,7 +174,9 @@ uniform vec2 chroma_center_offset; uniform vec2 chroma_div; uniform sampler2D lut_c; uniform sampler2D lut_l; +#if HAVE_3DTEX uniform sampler3D lut_3d; +#endif uniform sampler2D dither; uniform mat3 colormatrix; uniform vec3 colormatrix_c; @@ -230,16 +240,17 @@ vec4 sample_bicubic_fast(VIDEO_SAMPLER tex, vec2 texsize, vec2 texcoord, float p return mix(aa, ab, parmx.b); } +#if HAVE_ARRAYS float[2] weights2(sampler2D lookup, float f) { vec2 c = texture(lookup, vec2(0.5, f)).RG; return float[2](c.r, c.g); } - float[6] weights6(sampler2D lookup, float f) { vec4 c1 = texture(lookup, vec2(0.25, f)); vec4 c2 = texture(lookup, vec2(0.75, f)); return float[6](c1.r, c1.g, c1.b, c2.r, c2.g, c2.b); } +#endif // For N=n*4 with n>1 (N==4 is covered by weights4()). #define WEIGHTS_N(NAME, N) \ @@ -391,7 +402,7 @@ void main() { // CONST_LUMA involves numbers outside the [0,1] range so we make sure // to clip here, after the (possible) USE_CONST_LUMA calculations are done, // instead of immediately after the colormatrix conversion. - color = clamp(color, 0, 1); + color = clamp(color, 0.0, 1.0); #endif // If we are scaling in linear light (SRGB or 3DLUT option enabled), we // expand our source colors before scaling. This shader currently just @@ -435,7 +446,7 @@ void main() { // the fact that they're not representable on the target device. // TODO: Desaturate colorimetrically; this happens automatically for // 3dlut targets but not for sRGB mode. Not sure if this is a requirement. - color = clamp(color, 0, 1); + color = clamp(color, 0.0, 1.0); #endif #ifdef USE_3DLUT // For the 3DLUT we are arbitrarily using 2.4 as input gamma to reduce |