diff --git a/gfx/d3d/d3d.cpp b/gfx/d3d/d3d.cpp index 9d7a946497..48a758569d 100644 --- a/gfx/d3d/d3d.cpp +++ b/gfx/d3d/d3d.cpp @@ -110,7 +110,7 @@ static void d3d_deinitialize(d3d_video_t *d3d) if (!d3d) return; - font_driver_free(); + font_driver_free(NULL); d3d_deinit_chain(d3d); } diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 70ddf2a45b..ddd5f1a440 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1934,7 +1934,7 @@ static void gl_free(void *data) } #endif - font_driver_free(); + font_driver_free(NULL); gl_shader_deinit(gl); #ifndef NO_GL_FF_VERTEX diff --git a/gfx/drivers/vita2d_gfx.c b/gfx/drivers/vita2d_gfx.c index 19d4c1d5d8..f198ee3627 100644 --- a/gfx/drivers/vita2d_gfx.c +++ b/gfx/drivers/vita2d_gfx.c @@ -342,6 +342,8 @@ static void vita2d_gfx_free(void *data) vita->texture = NULL; } + font_driver_free(NULL); + RARCH_LOG("vita2d_gfx_free() done\n"); } diff --git a/gfx/font_driver.c b/gfx/font_driver.c index 0ae44239af..728f9c92a3 100644 --- a/gfx/font_driver.c +++ b/gfx/font_driver.c @@ -161,13 +161,17 @@ void font_driver_render_msg(void *font_data, const char *msg, const struct font_ font_ctx->render_msg(font_data ? font_data : driver->font_osd_data, msg, params); } -void font_driver_free(void) +void font_driver_free(void *data) { driver_t *driver = driver_get_ptr(); const font_renderer_t *font_ctx = (const font_renderer_t*)driver->font_osd_driver; if (font_ctx->free) - font_ctx->free(driver->font_osd_data); + font_ctx->free(data ? data : driver->font_osd_data); + + if (data) + return; + driver->font_osd_data = NULL; driver->font_osd_driver = NULL; } diff --git a/gfx/font_driver.h b/gfx/font_driver.h index ada7738e7d..f48ef7e3ad 100644 --- a/gfx/font_driver.h +++ b/gfx/font_driver.h @@ -65,7 +65,7 @@ bool font_driver_has_render_msg(void); void font_driver_render_msg(void *data, const char *msg, const struct font_params *params); -void font_driver_free(void); +void font_driver_free(void *data); bool font_driver_init_first(void *data, const char *font_path, float font_size, enum font_driver_render_api api); diff --git a/menu/menu_display.c b/menu/menu_display.c index d953566191..cf83e171b8 100644 --- a/menu/menu_display.c +++ b/menu/menu_display.c @@ -178,7 +178,7 @@ void menu_display_free_main_font(void) if (disp && disp->font.buf) { - driver->font_osd_driver->free(disp->font.buf); + font_driver_free(disp->font.buf); disp->font.buf = NULL; } }