Improve check for gl_check_mipmap

This commit is contained in:
twinaphex 2016-05-09 03:49:57 +02:00
parent ca976aeda9
commit 3e40b77108

View File

@ -182,9 +182,19 @@ static bool gl_check_sync_proc(gl_t *gl)
} }
#endif #endif
static bool gl_check_mipmap(gl_t *gl) static bool gl_check_mipmap(void)
{ {
if (!gl_query_extension(gl, "ARB_framebuffer_object")) static bool extension_queried = false;
static bool extension = false;
if (!extension_queried)
{
gl_t *gl = (gl_t*)video_driver_get_ptr(false);
extension = gl_query_extension(gl, "ARB_framebuffer_object");
extension_queried = true;
}
if (!extension)
return false; return false;
return glGenerateMipmap; return glGenerateMipmap;
@ -1166,7 +1176,7 @@ static void gl_frame_fbo(gl_t *gl, uint64_t frame_count,
mip_level = i + 1; mip_level = i + 1;
if (video_shader_driver_mipmap_input(&mip_level) if (video_shader_driver_mipmap_input(&mip_level)
&& gl_check_mipmap(gl)) && gl_check_mipmap())
glGenerateMipmap(GL_TEXTURE_2D); glGenerateMipmap(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
@ -1242,7 +1252,7 @@ static void gl_frame_fbo(gl_t *gl, uint64_t frame_count,
mip_level = gl->fbo_pass + 1; mip_level = gl->fbo_pass + 1;
if (video_shader_driver_mipmap_input(&mip_level) if (video_shader_driver_mipmap_input(&mip_level)
&& gl_check_mipmap(gl)) && gl_check_mipmap())
glGenerateMipmap(GL_TEXTURE_2D); glGenerateMipmap(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
@ -1832,7 +1842,7 @@ static bool gl_frame(void *data, const void *frame,
/* No point regenerating mipmaps /* No point regenerating mipmaps
* if there are no new frames. */ * if there are no new frames. */
if (gl->tex_mipmap && gl_check_mipmap(gl)) if (gl->tex_mipmap && gl_check_mipmap())
glGenerateMipmap(GL_TEXTURE_2D); glGenerateMipmap(GL_TEXTURE_2D);
} }
@ -3278,20 +3288,23 @@ static void gl_load_texture_data(
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap);
#if defined(HAVE_OPENGLES2) || defined(HAVE_PSGL) || defined(OSX_PPC) if (!gl_check_mipmap())
/* Assume no mipmapping support. */
switch (filter_type)
{ {
case TEXTURE_FILTER_MIPMAP_LINEAR: #if defined(HAVE_OPENGLES2) || defined(HAVE_PSGL) || defined(OSX_PPC)
filter_type = TEXTURE_FILTER_LINEAR; /* Assume no mipmapping support. */
break; switch (filter_type)
case TEXTURE_FILTER_MIPMAP_NEAREST: {
filter_type = TEXTURE_FILTER_NEAREST; case TEXTURE_FILTER_MIPMAP_LINEAR:
break; filter_type = TEXTURE_FILTER_LINEAR;
default: break;
break; case TEXTURE_FILTER_MIPMAP_NEAREST:
} filter_type = TEXTURE_FILTER_NEAREST;
break;
default:
break;
}
#endif #endif
}
switch (filter_type) switch (filter_type)
{ {
@ -3327,7 +3340,7 @@ static void gl_load_texture_data(
(use_rgba || !rgb32) ? GL_RGBA : RARCH_GL_TEXTURE_TYPE32, (use_rgba || !rgb32) ? GL_RGBA : RARCH_GL_TEXTURE_TYPE32,
(rgb32) ? RARCH_GL_FORMAT32 : GL_UNSIGNED_SHORT_4_4_4_4, frame); (rgb32) ? RARCH_GL_FORMAT32 : GL_UNSIGNED_SHORT_4_4_4_4, frame);
if (want_mipmap) if (want_mipmap && gl_check_mipmap())
glGenerateMipmap(GL_TEXTURE_2D); glGenerateMipmap(GL_TEXTURE_2D);
} }