diff options
author | James Ross-Gowan <rossymiles@gmail.com> | 2016-05-27 22:56:56 +1000 |
---|---|---|
committer | James Ross-Gowan <rossymiles@gmail.com> | 2016-05-27 23:02:26 +1000 |
commit | 84fba1df21577280078ab1db339d36019a4e419a (patch) | |
tree | b60617342f99076745142d0b7d2998c3f5e60460 | |
parent | ca87e623b5651d5c94274bdede86768a5562dd56 (diff) |
vo_opengl: enable color management on GLES
This requires the GL_EXT_texture_norm16 extension and works in ANGLE.
A default precision had to be set for sampler3Ds, otherwise the shaders
would fail to compile.
-rw-r--r-- | video/out/opengl/utils.c | 6 | ||||
-rw-r--r-- | video/out/opengl/video.c | 5 |
2 files changed, 8 insertions, 3 deletions
diff --git a/video/out/opengl/utils.c b/video/out/opengl/utils.c index 3d41f0693c..cfb6eec679 100644 --- a/video/out/opengl/utils.c +++ b/video/out/opengl/utils.c @@ -902,8 +902,12 @@ void gl_sc_gen_shader_and_reset(struct gl_shader_cache *sc) ADD(header, "#version %d%s\n", gl->glsl_version, gl->es >= 300 ? " es" : ""); for (int n = 0; n < sc->num_exts; n++) ADD(header, "#extension %s : enable\n", sc->exts[n]); - if (gl->es) + if (gl->es) { ADD(header, "precision mediump float;\n"); + ADD(header, "precision mediump sampler2D;\n"); + if (gl->mpgl_caps & MPGL_CAP_3D_TEX) + ADD(header, "precision mediump sampler3D;\n"); + } ADD_BSTR(header, sc->prelude_text); char *vert_in = gl->glsl_version >= 130 ? "in" : "attribute"; char *vert_out = gl->glsl_version >= 130 ? "out" : "varying"; diff --git a/video/out/opengl/video.c b/video/out/opengl/video.c index 8859b34ed8..130f569295 100644 --- a/video/out/opengl/video.c +++ b/video/out/opengl/video.c @@ -3027,6 +3027,7 @@ static void check_gl_features(struct gl_video *p) bool have_3d_tex = gl->mpgl_caps & MPGL_CAP_3D_TEX; bool have_mglsl = gl->glsl_version >= 130; // modern GLSL (1st class arrays etc.) bool have_texrg = gl->mpgl_caps & MPGL_CAP_TEX_RG; + bool have_tex16 = !gl->es || (gl->mpgl_caps & MPGL_CAP_EXT16); const GLint auto_fbo_fmts[] = {GL_RGBA16, GL_RGBA16F, GL_RGB10_A2, GL_RGBA8, 0}; @@ -3106,9 +3107,9 @@ static void check_gl_features(struct gl_video *p) // GLES3 doesn't provide filtered 16 bit integer textures // GLES2 doesn't even provide 3D textures - if (p->use_lut_3d && (!have_3d_tex || gl->es)) { + if (p->use_lut_3d && (!have_3d_tex || !have_tex16)) { p->use_lut_3d = false; - MP_WARN(p, "Disabling color management (GLES unsupported).\n"); + MP_WARN(p, "Disabling color management (no RGB16 3D textures).\n"); } int use_cms = p->opts.target_prim != MP_CSP_PRIM_AUTO || |