diff --git a/driver.h b/driver.h index b1c319c53a..cc8e842cb1 100644 --- a/driver.h +++ b/driver.h @@ -29,6 +29,7 @@ #include "frontend/frontend_driver.h" #include "ui/ui_companion_driver.h" #include "gfx/video_driver.h" +#include "gfx/font_renderer_driver.h" #include "audio/audio_driver.h" #include "menu/menu_driver.h" @@ -201,7 +202,9 @@ typedef struct driver const rarch_resampler_t *resampler; const record_driver_t *recording; struct retro_callbacks retro_ctx; + const struct font_renderer *font_osd_driver; + void *font_osd_data; void *audio_data; void *video_data; void *video_context_data; diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 237093bc85..b4cb94afa1 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1478,17 +1478,15 @@ static INLINE void gl_draw_texture(gl_t *gl) static bool gl_frame(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch, const char *msg) { - const struct font_renderer *font_driver = NULL; gl_t *gl = (gl_t*)data; runloop_t *runloop = rarch_main_get_ptr(); driver_t *driver = driver_get_ptr(); settings_t *settings = config_get_ptr(); + const struct font_renderer *font_driver = driver ? driver->font_osd_driver : NULL; RARCH_PERFORMANCE_INIT(frame_run); RARCH_PERFORMANCE_START(frame_run); - font_driver = (const struct font_renderer*)gl->font_driver; - context_bind_hw_render(gl, false); #ifndef HAVE_OPENGLES @@ -1615,8 +1613,8 @@ static bool gl_frame(void *data, const void *frame, gl_draw_texture(gl); #endif - if (msg && font_driver && gl->font_handle) - font_driver->render_msg(gl->font_handle, msg, NULL); + if (msg && driver->font_osd_driver && driver->font_osd_data) + font_driver->render_msg(driver->font_osd_data, msg, NULL); #ifdef HAVE_OVERLAY if (gl->overlay_enable) @@ -1729,12 +1727,13 @@ static void gl_free_overlay(gl_t *gl) static void gl_free(void *data) { gl_t *gl = (gl_t*)data; + driver_t *driver = driver_get_ptr(); const struct font_renderer *font_driver = NULL; if (!gl) return; - font_driver = (const struct font_renderer*)gl->font_driver; + font_driver = (const struct font_renderer*)driver->font_osd_driver; context_bind_hw_render(gl, false); @@ -1753,8 +1752,8 @@ static void gl_free(void *data) } #endif - if (font_driver && gl->font_handle) - font_driver->free(gl->font_handle); + if (font_driver && driver->font_osd_data) + font_driver->free(driver->font_osd_data); gl_shader_deinit(gl); #ifndef NO_GL_FF_VERTEX @@ -2419,7 +2418,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo if (settings->video.font_enable) { - if (!font_init_first(&gl->font_driver, &gl->font_handle, + if (!font_init_first((const void**)&driver->font_osd_driver, &driver->font_osd_data, gl, *settings->video.font_path ? settings->video.font_path : NULL, settings->video.font_size, FONT_DRIVER_RENDER_OPENGL_API)) @@ -3125,16 +3124,17 @@ static void gl_set_osd_msg(void *data, const char *msg, const struct font_params *params, void *font) { const struct font_renderer *font_driver = NULL; + driver_t *driver = driver_get_ptr(); gl_t *gl = (gl_t*)data; if (!gl) return; - font_driver = (const struct font_renderer*)gl->font_driver; + font_driver = (const struct font_renderer*)driver->font_osd_driver; - if (font_driver && gl->font_handle) + if (driver->font_osd_driver && driver->font_osd_data) { context_bind_hw_render(gl, false); - font_driver->render_msg(font ? font : gl->font_handle, msg, params); + font_driver->render_msg(font ? font : driver->font_osd_data, msg, params); context_bind_hw_render(gl, true); } } diff --git a/gfx/drivers/gl_common.h b/gfx/drivers/gl_common.h index c0dc399d28..91247dec22 100644 --- a/gfx/drivers/gl_common.h +++ b/gfx/drivers/gl_common.h @@ -319,10 +319,6 @@ typedef struct gl bool have_es2_compat; #endif - /* Fonts */ - const void *font_driver; - void *font_handle; - bool egl_images; video_info_t video_info; diff --git a/menu/drivers/glui.c b/menu/drivers/glui.c index b9caeb534f..db18777773 100644 --- a/menu/drivers/glui.c +++ b/menu/drivers/glui.c @@ -443,6 +443,7 @@ static void glui_frame(void) glui_handle_t *glui = NULL; const char *core_name = NULL; const char *core_version = NULL; + driver_t *driver = driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr(); settings_t *settings = config_get_ptr(); const uint32_t normal_color = FONT_COLOR_ARGB_TO_RGBA( @@ -486,7 +487,7 @@ static void glui_frame(void) menu->navigation.selection_ptr, gl->win_width, glui->line_height, 1, 1, 1, 0.1); - font_driver = (const struct font_renderer*)gl->font_driver; + font_driver = driver->font_osd_driver; menu_display_font_bind_block(menu, font_driver, &glui->list_block); @@ -624,6 +625,7 @@ static void glui_free(void *data) gl_t *gl = NULL; const struct font_renderer *font_driver = NULL; menu_handle_t *menu = (menu_handle_t*)data; + driver_t *driver = driver_get_ptr(); glui_handle_t *glui = (glui_handle_t*)menu->userdata; if (!glui || !menu) @@ -633,10 +635,10 @@ static void glui_free(void *data) gl = (gl_t*)video_driver_get_ptr(NULL); - font_driver = gl ? (const struct font_renderer*)gl->font_driver : NULL; + font_driver = gl ? (const struct font_renderer*)driver->font_osd_driver : NULL; if (font_driver && font_driver->bind_block) - font_driver->bind_block(gl->font_handle, NULL); + font_driver->bind_block(driver->font_osd_data, NULL); if (menu->userdata) free(menu->userdata); @@ -753,11 +755,9 @@ static void glui_context_reset(void) { gl_t *gl = NULL; glui_handle_t *glui = NULL; - const font_renderer_driver_t *font_drv = NULL; + driver_t *driver = driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr(); - (void)font_drv; - if (!menu) return; @@ -770,10 +770,8 @@ static void glui_context_reset(void) if (!gl) return; - font_drv = (const font_renderer_driver_t *)gl->font_driver; - menu_display_font_init_first( - &gl->font_driver, + (const void**)&driver->font_osd_driver, &menu->font.buf, gl, NULL, diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index a6e68bfc3a..472272419a 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1571,15 +1571,11 @@ error: static void xmb_free(void *data) { - menu_handle_t *menu = (menu_handle_t*)data; xmb_handle_t *xmb = NULL; - const struct font_renderer *font_driver = NULL; - gl_t *gl = (gl_t*)video_driver_get_ptr(NULL); - - if (!gl) - return; - - font_driver = (const struct font_renderer*)gl->font_driver; + menu_handle_t *menu = (menu_handle_t*)data; + driver_t *driver = driver_get_ptr(); + const struct font_renderer *font_driver = + (const struct font_renderer*)driver->font_osd_driver; if (menu && menu->userdata) { @@ -1595,7 +1591,7 @@ static void xmb_free(void *data) } if (font_driver->bind_block) - font_driver->bind_block(gl->font_handle, NULL); + font_driver->bind_block(driver->font_osd_data, NULL); } static bool xmb_load_wallpaper(void *data) @@ -1640,6 +1636,7 @@ static void xmb_context_reset(void) menu_handle_t *menu = menu_driver_get_ptr(); settings_t *settings = config_get_ptr(); global_t *global = global_get_ptr(); + driver_t *driver = driver_get_ptr(); if (!menu) return; @@ -1666,7 +1663,7 @@ static void xmb_context_reset(void) fill_pathname_join(fontpath, themepath, "font.ttf", sizeof(fontpath)); menu_display_font_init_first( - &gl->font_driver, + (const void**)&driver->font_osd_driver, &menu->font.buf, gl, fontpath,