From 1d0bf4073b8c0ba3ae67c8d387e92a98072ddc99 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 11 Aug 2017 20:55:14 +0200 Subject: vo_opengl: handle probing GL texture formats better Retrieve the depth for each component and internal texture format separately. Only for 8 bit per component textures we assume that all bits are used (or else we would in my opinion create too many probe textures). Assuming 8 bit components are always correct also fixes operation in GLES3, where we assumed that each component had -1 bits depth, and this all UNORM formats were considered unusable. On GLES, the function to check the real bit depth is not available. Since GLES has no 16 bit UNORM textures at all, except with the MPGL_CAP_EXT16 extension, just drop the special condition for it. (Of course GLES still manages to introduce a funny special case by allowing GL_LUMINANCE , but not defining GL_TEXTURE_LUMINANCE_SIZE.) Should fix #4749. --- video/out/opengl/gl_utils.c | 29 ----------------------------- 1 file changed, 29 deletions(-) (limited to 'video/out/opengl/gl_utils.c') diff --git a/video/out/opengl/gl_utils.c b/video/out/opengl/gl_utils.c index 9f81166404..ab34eea2e5 100644 --- a/video/out/opengl/gl_utils.c +++ b/video/out/opengl/gl_utils.c @@ -335,35 +335,6 @@ void gl_pbo_upload_uninit(struct gl_pbo_upload *pbo) *pbo = (struct gl_pbo_upload){0}; } -// The intention is to return the actual depth of any fixed point 16 bit -// textures. (Actually tests only 1 format - hope that is good enough.) -int gl_determine_16bit_tex_depth(GL *gl) -{ - const struct gl_format *fmt = gl_find_unorm_format(gl, 2, 1); - if (!gl->GetTexLevelParameteriv || !fmt) { - // ANGLE supports ES 3.0 and the extension, but lacks the function above. - if (gl->mpgl_caps & MPGL_CAP_EXT16) - return 16; - return -1; - } - - GLuint tex; - gl->GenTextures(1, &tex); - gl->BindTexture(GL_TEXTURE_2D, tex); - gl->TexImage2D(GL_TEXTURE_2D, 0, fmt->internal_format, 64, 64, 0, - fmt->format, fmt->type, NULL); - GLenum pname = 0; - switch (fmt->format) { - case GL_RED: pname = GL_TEXTURE_RED_SIZE; break; - case GL_LUMINANCE: pname = GL_TEXTURE_LUMINANCE_SIZE; break; - } - GLint param = -1; - if (pname) - gl->GetTexLevelParameteriv(GL_TEXTURE_2D, 0, pname, ¶m); - gl->DeleteTextures(1, &tex); - return param; -} - int gl_get_fb_depth(GL *gl, int fbo) { if ((gl->es < 300 && !gl->version) || !(gl->mpgl_caps & MPGL_CAP_FB)) -- cgit v1.2.3