diff --git a/gfx/d3d/d3d.cpp b/gfx/d3d/d3d.cpp index 091064ce37..d215b32f30 100644 --- a/gfx/d3d/d3d.cpp +++ b/gfx/d3d/d3d.cpp @@ -1138,7 +1138,7 @@ static void *d3d_init(const video_info_t *info, return d3d; error: - gfx_ctx_destroy(ctx_driver); + gfx_ctx_ctl(GFX_CTL_DESTROY, NULL); if (d3d) delete d3d; return NULL; diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index e453e307da..38e54a0ecb 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -2454,18 +2454,14 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo { unsigned win_width, win_height, temp_width = 0, temp_height = 0; bool force_smooth = false; - const gfx_ctx_driver_t *ctx_driver = NULL; const char *vendor = NULL; const char *renderer = NULL; const char *version = NULL; struct retro_hw_render_callback *hw_render = NULL; settings_t *settings = config_get_ptr(); gl_t *gl = (gl_t*)calloc(1, sizeof(gl_t)); - if (!gl) - return NULL; - - ctx_driver = gl_get_context(gl); - if (!ctx_driver) + const gfx_ctx_driver_t *ctx_driver = gl_get_context(gl); + if (!gl || !ctx_driver) goto error; gfx_ctx_set(ctx_driver); @@ -2672,7 +2668,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo return gl; error: - gfx_ctx_destroy(ctx_driver); + gfx_ctx_ctl(GFX_CTL_DESTROY, NULL); free(gl); return NULL; } diff --git a/gfx/drivers/vg.c b/gfx/drivers/vg.c index b217519715..53afcd42dc 100644 --- a/gfx/drivers/vg.c +++ b/gfx/drivers/vg.c @@ -87,16 +87,11 @@ static void *vg_init(const video_info_t *video, const input_driver_t **input, vo unsigned temp_width = 0, temp_height = 0; VGfloat clearColor[4] = {0, 0, 0, 1}; settings_t *settings = config_get_ptr(); - const gfx_ctx_driver_t *ctx = NULL; vg_t *vg = (vg_t*)calloc(1, sizeof(vg_t)); - - if (!vg) - goto error; - - ctx = gfx_ctx_init_first(vg, settings->video.context_driver, + const gfx_ctx_driver_t *ctx = gfx_ctx_init_first(vg, settings->video.context_driver, GFX_CTX_OPENVG_API, 0, 0, false); - if (!ctx) + if (!vg || !ctx) goto error; gfx_ctx_set(ctx); @@ -199,7 +194,7 @@ static void *vg_init(const video_info_t *video, const input_driver_t **input, vo error: if (vg) free(vg); - gfx_ctx_destroy(ctx); + gfx_ctx_ctl(GFX_CTL_DESTROY, NULL); return NULL; } diff --git a/gfx/video_context_driver.c b/gfx/video_context_driver.c index b7d63743f0..3ed06b08e9 100644 --- a/gfx/video_context_driver.c +++ b/gfx/video_context_driver.c @@ -90,11 +90,6 @@ void gfx_ctx_set(const gfx_ctx_driver_t *ctx_driver) current_video_context = ctx_driver; } -void gfx_ctx_destroy(const gfx_ctx_driver_t *ctx_driver) -{ - current_video_context = NULL; -} - const char *gfx_ctx_get_ident(void) { const gfx_ctx_driver_t *ctx = current_video_context; @@ -412,6 +407,9 @@ bool gfx_ctx_ctl(enum gfx_ctx_ctl_state state, void *data) { switch (state) { + case GFX_CTL_DESTROY: + current_video_context = NULL; + break; case GFX_CTL_UPDATE_WINDOW_TITLE: if (!current_video_context || !current_video_context->update_window_title) return false; diff --git a/gfx/video_context_driver.h b/gfx/video_context_driver.h index a201f1f68d..76482d8fba 100644 --- a/gfx/video_context_driver.h +++ b/gfx/video_context_driver.h @@ -55,6 +55,7 @@ enum gfx_ctx_ctl_state { GFX_CTL_NONE = 0, GFX_CTL_FOCUS, + GFX_CTL_DESTROY, GFX_CTL_FREE, GFX_CTL_SWAP_BUFFERS, GFX_CTL_HAS_WINDOWED, @@ -252,8 +253,6 @@ retro_proc_address_t gfx_ctx_get_proc_address(const char *sym); void gfx_ctx_set(const gfx_ctx_driver_t *ctx_driver); -void gfx_ctx_destroy(const gfx_ctx_driver_t *ctx_driver); - bool gfx_ctx_ctl(enum gfx_ctx_ctl_state state, void *data); #ifdef __cplusplus