From e2cc3bc08d9d4cb8b37ce6d0755ae2a6868c60bb Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 16 May 2016 05:55:42 +0200 Subject: [PATCH] Create gl_query_core_context_in_use --- gfx/common/gl_common.h | 3 +- gfx/drivers/gl.c | 69 +++++++++++++++++-------------- gfx/drivers_font/gl_raster_font.c | 2 +- 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index 8c244d13bf..1b62820156 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -215,7 +215,6 @@ typedef struct gl bool has_srgb_fbo_gles3; #endif bool hw_render_use; - bool shared_context_use; bool should_resize; bool quitting; @@ -286,7 +285,6 @@ typedef struct gl unsigned fence_count; #endif - bool core_context; GLuint vao; } gl_t; @@ -339,6 +337,7 @@ static INLINE unsigned gl_wrap_type_to_enum(enum gfx_wrap_type type) return 0; } +bool gl_query_core_context_in_use(void); void gl_ff_vertex(const struct video_coords *coords); void gl_ff_matrix(const math_matrix_4x4 *mat); diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 50e59dc74b..d585ea9db4 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -112,11 +112,17 @@ static const GLfloat white_color[] = { 1, 1, 1, 1, }; -static bool gl_core_context = false; +static bool gl_core_context = false; +static bool gl_shared_context_use = false; -static INLINE void context_bind_hw_render(gl_t *gl, bool enable) +bool gl_query_core_context_in_use(void) { - if (gl && gl->shared_context_use) + return gl_core_context; +} + +static INLINE void context_bind_hw_render(bool enable) +{ + if (gl_shared_context_use) video_context_driver_bind_hw_render(&enable); } @@ -751,7 +757,7 @@ static void gl_deinit_hw_render(gl_t *gl) if (!gl) return; - context_bind_hw_render(gl, true); + context_bind_hw_render(true); if (gl->hw_render_fbo_init) glDeleteFramebuffers(gl->textures, gl->hw_render_fbo); @@ -759,7 +765,7 @@ static void gl_deinit_hw_render(gl_t *gl) glDeleteRenderbuffers(gl->textures, gl->hw_render_depth); gl->hw_render_fbo_init = false; - context_bind_hw_render(gl, false); + context_bind_hw_render(false); } static bool gl_init_hw_render(gl_t *gl, unsigned width, unsigned height) @@ -775,7 +781,7 @@ static bool gl_init_hw_render(gl_t *gl, unsigned width, unsigned height) /* We can only share texture objects through contexts. * FBOs are "abstract" objects and are not shared. */ - context_bind_hw_render(gl, true); + context_bind_hw_render(true); RARCH_LOG("[GL]: Initializing HW render (%u x %u).\n", width, height); glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_fbo_size); @@ -855,7 +861,7 @@ static bool gl_init_hw_render(gl_t *gl, unsigned width, unsigned height) gl_bind_backbuffer(); gl->hw_render_fbo_init = true; - context_bind_hw_render(gl, false); + context_bind_hw_render(false); return true; } #endif @@ -1773,7 +1779,7 @@ static bool gl_frame(void *data, const void *frame, video_driver_get_size(&width, &height); - context_bind_hw_render(gl, false); + context_bind_hw_render(false); #ifndef HAVE_OPENGLES if (gl_core_context) @@ -2043,7 +2049,7 @@ static bool gl_frame(void *data, const void *frame, glBindVertexArray(0); #endif - context_bind_hw_render(gl, true); + context_bind_hw_render(true); return true; } @@ -2079,7 +2085,8 @@ static void gl_destroy_resources(gl_t *gl) free(gl); } - gl_core_context = false; + gl_shared_context_use = false; + gl_core_context = false; } static void gl_free(void *data) @@ -2088,7 +2095,7 @@ static void gl_free(void *data) if (!gl) return; - context_bind_hw_render(gl, false); + context_bind_hw_render(false); #ifdef HAVE_GL_SYNC if (gl->have_sync) @@ -2168,13 +2175,13 @@ static void gl_set_nonblock_state(void *data, bool state) RARCH_LOG("[GL]: VSync => %s\n", state ? "off" : "on"); - context_bind_hw_render(gl, false); + context_bind_hw_render(false); if (!state) interval = settings->video.swap_interval; video_context_driver_swap_interval(&interval); - context_bind_hw_render(gl, true); + context_bind_hw_render(true); } static bool resolve_extensions(gl_t *gl, const char *context_ident) @@ -2470,11 +2477,11 @@ static const gfx_ctx_driver_t *gl_get_context(gl_t *gl) (void)api_name; - gl->shared_context_use = settings->video.shared_context + gl_shared_context_use = settings->video.shared_context && hwr->context_type != RETRO_HW_CONTEXT_NONE; return video_context_driver_init_first(gl, settings->video.context_driver, - api, major, minor, gl->shared_context_use); + api, major, minor, gl_shared_context_use); } #ifdef GL_DEBUG @@ -2743,9 +2750,9 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo * create textures. */ gl->textures = 1; #ifdef GL_DEBUG - context_bind_hw_render(gl, true); + context_bind_hw_render(true); gl_begin_debug(gl); - context_bind_hw_render(gl, false); + context_bind_hw_render(false); #endif } #endif @@ -2877,7 +2884,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo if (!gl_check_error()) goto error; - context_bind_hw_render(gl, true); + context_bind_hw_render(true); return gl; error: @@ -2949,7 +2956,7 @@ static void gl_update_tex_filter_frame(gl_t *gl) if (!gl) return; - context_bind_hw_render(gl, false); + context_bind_hw_render(false); shader_filter.index = 1; shader_filter.smooth = &smooth; @@ -2990,7 +2997,7 @@ static void gl_update_tex_filter_frame(gl_t *gl) } glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]); - context_bind_hw_render(gl, true); + context_bind_hw_render(true); } static bool gl_set_shader(void *data, @@ -3005,7 +3012,7 @@ static bool gl_set_shader(void *data, if (!gl) return false; - context_bind_hw_render(gl, false); + context_bind_hw_render(false); if (type == RARCH_SHADER_NONE) return false; @@ -3086,7 +3093,7 @@ static bool gl_set_shader(void *data, /* Apparently need to set viewport for passes when we aren't using FBOs. */ gl_set_shader_viewport(gl, 0); gl_set_shader_viewport(gl, 1); - context_bind_hw_render(gl, true); + context_bind_hw_render(true); #if defined(_WIN32) && !defined(_XBOX) shader_dlg_params_reload(); #endif @@ -3096,7 +3103,7 @@ static bool gl_set_shader(void *data, return true; error: - context_bind_hw_render(gl, true); + context_bind_hw_render(true); return false; } @@ -3128,7 +3135,7 @@ static bool gl_read_viewport(void *data, uint8_t *buffer) if (!gl) return false; - context_bind_hw_render(gl, false); + context_bind_hw_render(false); rarch_perf_init(&read_viewport, "read_viewport"); retro_perf_start(&read_viewport); @@ -3213,11 +3220,11 @@ static bool gl_read_viewport(void *data, uint8_t *buffer) } retro_perf_stop(&read_viewport); - context_bind_hw_render(gl, true); + context_bind_hw_render(true); return true; error: - context_bind_hw_render(gl, true); + context_bind_hw_render(true); #endif return false; @@ -3419,14 +3426,14 @@ static bool gl_overlay_load(void *data, if (!gl) return false; - context_bind_hw_render(gl, false); + context_bind_hw_render(false); gl_free_overlay(gl); gl->overlay_tex = (GLuint*)calloc(num_images, sizeof(*gl->overlay_tex)); if (!gl->overlay_tex) { - context_bind_hw_render(gl, true); + context_bind_hw_render(true); return false; } @@ -3464,7 +3471,7 @@ static bool gl_overlay_load(void *data, gl->overlay_color_coord[16 * i + j] = 1.0f; } - context_bind_hw_render(gl, true); + context_bind_hw_render(true); return true; } @@ -3705,7 +3712,7 @@ static void gl_set_texture_frame(void *data, if (!gl) return; - context_bind_hw_render(gl, false); + context_bind_hw_render(false); menu_filter = settings->menu.linear_filter ? TEXTURE_FILTER_LINEAR : TEXTURE_FILTER_NEAREST; @@ -3722,7 +3729,7 @@ static void gl_set_texture_frame(void *data, gl->menu_texture_alpha = alpha; glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]); - context_bind_hw_render(gl, true); + context_bind_hw_render(true); } static void gl_set_texture_enable(void *data, bool state, bool full_screen) diff --git a/gfx/drivers_font/gl_raster_font.c b/gfx/drivers_font/gl_raster_font.c index 497521de79..b400192697 100644 --- a/gfx/drivers_font/gl_raster_font.c +++ b/gfx/drivers_font/gl_raster_font.c @@ -71,7 +71,7 @@ static bool gl_raster_font_upload_atlas(gl_raster_t *font, } #if defined(GL_VERSION_3_0) - if (font->gl->core_context || + if (gl_query_core_context_in_use() || (hwr->context_type == RETRO_HW_CONTEXT_OPENGL && hwr->version_major >= 3)) {