diff --git a/gfx/common/metal_common.m b/gfx/common/metal_common.m index f7735b2f21..94069a513d 100644 --- a/gfx/common/metal_common.m +++ b/gfx/common/metal_common.m @@ -176,7 +176,11 @@ // overlay view _overlay = [[Overlay alloc] initWithContext:_context]; - font_driver_init_osd((__bridge void *)self, false, video->is_threaded, FONT_DRIVER_RENDER_METAL_API); + font_driver_init_osd((__bridge void *)self, + video, + false, + video->is_threaded, + FONT_DRIVER_RENDER_METAL_API); } return self; } diff --git a/gfx/drivers/caca_gfx.c b/gfx/drivers/caca_gfx.c index 33c1f366c0..0ff98eb21f 100644 --- a/gfx/drivers/caca_gfx.c +++ b/gfx/drivers/caca_gfx.c @@ -94,7 +94,8 @@ static void *caca_gfx_init(const video_info_t *video, } if (video->font_enable) - font_driver_init_osd(caca, false, video->is_threaded, + font_driver_init_osd(caca, video, + false, video->is_threaded, FONT_DRIVER_RENDER_CACA); return caca; diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index c8a7075a9f..785003f4ab 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -485,7 +485,8 @@ static void* ctr_init(const video_info_t* video, driver_ctl(RARCH_DRIVER_CTL_SET_REFRESH_RATE, &refresh_rate); aptHook(&ctr->lcd_aptHook, ctr_lcd_aptHook, ctr); - font_driver_init_osd(ctr, false, + font_driver_init_osd(ctr, video, + false, video->is_threaded, FONT_DRIVER_RENDER_CTR); diff --git a/gfx/drivers/d3d10.c b/gfx/drivers/d3d10.c index 3b9d074f75..e017bb3a7c 100644 --- a/gfx/drivers/d3d10.c +++ b/gfx/drivers/d3d10.c @@ -966,7 +966,11 @@ static void *d3d10_gfx_init(const video_info_t* video, D3D10SetState(d3d10->device, d3d10->state); - font_driver_init_osd(d3d10, false, video->is_threaded, FONT_DRIVER_RENDER_D3D10_API); + font_driver_init_osd(d3d10, + video, + false, + video->is_threaded, + FONT_DRIVER_RENDER_D3D10_API); { d3d10_fake_context.get_flags = d3d10_get_flags; diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 8f9e29da3c..0a7fc1e841 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -1041,7 +1041,11 @@ static void *d3d11_gfx_init(const video_info_t* video, } D3D11SetState(d3d11->context, d3d11->state); - font_driver_init_osd(d3d11, false, video->is_threaded, FONT_DRIVER_RENDER_D3D11_API); + font_driver_init_osd(d3d11, + video, + false, + video->is_threaded, + FONT_DRIVER_RENDER_D3D11_API); { d3d11_fake_context.get_flags = d3d11_get_flags; diff --git a/gfx/drivers/d3d12.c b/gfx/drivers/d3d12.c index 134b7816cf..ab5bff27f5 100644 --- a/gfx/drivers/d3d12.c +++ b/gfx/drivers/d3d12.c @@ -1005,7 +1005,11 @@ static void *d3d12_gfx_init(const video_info_t* video, d3d12->frame.texture[0].srv_heap = &d3d12->desc.srv_heap; d3d12_init_texture(d3d12->device, &d3d12->frame.texture[0]); - font_driver_init_osd(d3d12, false, video->is_threaded, FONT_DRIVER_RENDER_D3D12_API); + font_driver_init_osd(d3d12, + video, + false, + video->is_threaded, + FONT_DRIVER_RENDER_D3D12_API); { d3d12_fake_context.get_flags = d3d12_get_flags; diff --git a/gfx/drivers/d3d8.c b/gfx/drivers/d3d8.c index c9b34095ba..6252825cc7 100644 --- a/gfx/drivers/d3d8.c +++ b/gfx/drivers/d3d8.c @@ -948,7 +948,8 @@ static bool d3d8_initialize(d3d8_video_t *d3d, const video_info_t *info) d3d8_set_viewport(d3d, width, height, false, true); - font_driver_init_osd(d3d, false, + font_driver_init_osd(d3d, info, + false, info->is_threaded, FONT_DRIVER_RENDER_D3D8_API); diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index 432cd4c44d..f9525d361f 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -956,7 +956,8 @@ static bool d3d9_initialize(d3d9_video_t *d3d, const video_info_t *info) strlcpy(settings->paths.path_font, "game:\\media\\Arial_12.xpr", sizeof(settings->paths.path_font)); #endif - font_driver_init_osd(d3d, false, + font_driver_init_osd(d3d, info, + false, info->is_threaded, FONT_DRIVER_RENDER_D3D9_API); diff --git a/gfx/drivers/fpga_gfx.c b/gfx/drivers/fpga_gfx.c index 078cdae675..bcba0760a9 100644 --- a/gfx/drivers/fpga_gfx.c +++ b/gfx/drivers/fpga_gfx.c @@ -210,7 +210,9 @@ static void *fpga_gfx_init(const video_info_t *video, video_context_driver_input_driver(&inp); if (settings->bools.video_font_enable) - font_driver_init_osd(NULL, false, + font_driver_init_osd(NULL, + video, + false, video->is_threaded, FONT_DRIVER_RENDER_FPGA); diff --git a/gfx/drivers/gdi_gfx.c b/gfx/drivers/gdi_gfx.c index 0b8dd02fb9..aabc1729fe 100644 --- a/gfx/drivers/gdi_gfx.c +++ b/gfx/drivers/gdi_gfx.c @@ -174,7 +174,9 @@ static void *gdi_gfx_init(const video_info_t *video, video_context_driver_input_driver(&inp); if (settings->bools.video_font_enable) - font_driver_init_osd(gdi, false, + font_driver_init_osd(gdi, + video, + false, video->is_threaded, FONT_DRIVER_RENDER_GDI); diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 561bb4e081..22364f3b28 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -3921,7 +3921,8 @@ static void *gl2_init(const video_info_t *video, video_context_driver_input_driver(&inp); if (video->font_enable) - font_driver_init_osd(gl, false, + font_driver_init_osd(gl, video, + false, video->is_threaded, FONT_DRIVER_RENDER_OPENGL_API); diff --git a/gfx/drivers/gl1.c b/gfx/drivers/gl1.c index 1a8468f655..9a308a6fca 100644 --- a/gfx/drivers/gl1.c +++ b/gfx/drivers/gl1.c @@ -394,7 +394,9 @@ static void *gl1_gfx_init(const video_info_t *video, video_context_driver_input_driver(&inp); if (settings->bools.video_font_enable) - font_driver_init_osd(gl1, false, + font_driver_init_osd(gl1, + video, + false, video->is_threaded, FONT_DRIVER_RENDER_OPENGL1_API); diff --git a/gfx/drivers/gl_core.c b/gfx/drivers/gl_core.c index 2c44d8b12d..d6a5ac09f9 100644 --- a/gfx/drivers/gl_core.c +++ b/gfx/drivers/gl_core.c @@ -1322,9 +1322,11 @@ static void *gl_core_init(const video_info_t *video, if (video->font_enable) { - font_driver_init_osd(gl, false, - video->is_threaded, - FONT_DRIVER_RENDER_OPENGL_CORE_API); + font_driver_init_osd(gl, + video, + false, + video->is_threaded, + FONT_DRIVER_RENDER_OPENGL_CORE_API); } gl->pbo_readback_enable = settings->bools.video_gpu_record diff --git a/gfx/drivers/gx2_gfx.c b/gfx/drivers/gx2_gfx.c index 2c00a23541..579e1e5357 100644 --- a/gfx/drivers/gx2_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -446,9 +446,11 @@ static void *wiiu_gfx_init(const video_info_t *video, driver_ctl(RARCH_DRIVER_CTL_SET_REFRESH_RATE, &refresh_rate); - font_driver_init_osd(wiiu, false, - video->is_threaded, - FONT_DRIVER_RENDER_WIIU); + font_driver_init_osd(wiiu, + video, + false, + video->is_threaded, + FONT_DRIVER_RENDER_WIIU); { enum rarch_shader_type type; diff --git a/gfx/drivers/network_gfx.c b/gfx/drivers/network_gfx.c index a764914ebb..0b95b595c3 100644 --- a/gfx/drivers/network_gfx.c +++ b/gfx/drivers/network_gfx.c @@ -107,7 +107,9 @@ static void *network_gfx_init(const video_info_t *video, video_context_driver_input_driver(&inp); if (settings->bools.video_font_enable) - font_driver_init_osd(network, false, + font_driver_init_osd(network, + video, + false, video->is_threaded, FONT_DRIVER_RENDER_NETWORK_VIDEO); diff --git a/gfx/drivers/ps2_gfx.c b/gfx/drivers/ps2_gfx.c index 10b8ad3b51..ccd43548b2 100644 --- a/gfx/drivers/ps2_gfx.c +++ b/gfx/drivers/ps2_gfx.c @@ -261,7 +261,11 @@ static void *ps2_gfx_init(const video_info_t *video, init_ps2_video(ps2); if (video->font_enable) - font_driver_init_osd(ps2, false, video->is_threaded, FONT_DRIVER_RENDER_PS2); + font_driver_init_osd(ps2, + video, + false, + video->is_threaded, + FONT_DRIVER_RENDER_PS2); ps2->PSM = (video->rgb32 ? GS_PSM_CT32 : GS_PSM_CT16); ps2->fullscreen = video->fullscreen; diff --git a/gfx/drivers/sixel_gfx.c b/gfx/drivers/sixel_gfx.c index 01d0268dc9..e647f2c73d 100644 --- a/gfx/drivers/sixel_gfx.c +++ b/gfx/drivers/sixel_gfx.c @@ -239,7 +239,9 @@ static void *sixel_gfx_init(const video_info_t *video, video_context_driver_input_driver(&inp); if (settings->bools.video_font_enable) - font_driver_init_osd(sixel, false, + font_driver_init_osd(sixel, + video, + false, video->is_threaded, FONT_DRIVER_RENDER_SIXEL); diff --git a/gfx/drivers/switch_nx_gfx.c b/gfx/drivers/switch_nx_gfx.c index 102cea6bd9..1510127d9b 100644 --- a/gfx/drivers/switch_nx_gfx.c +++ b/gfx/drivers/switch_nx_gfx.c @@ -220,9 +220,11 @@ static void *switch_init(const video_info_t *video, *input_data = switchinput; } - font_driver_init_osd(sw, false, - video->is_threaded, - FONT_DRIVER_RENDER_SWITCH); + font_driver_init_osd(sw, + video, + false, + video->is_threaded, + FONT_DRIVER_RENDER_SWITCH); clear_screen(sw); diff --git a/gfx/drivers/vga_gfx.c b/gfx/drivers/vga_gfx.c index 98cdc3eeff..6352256786 100644 --- a/gfx/drivers/vga_gfx.c +++ b/gfx/drivers/vga_gfx.c @@ -137,7 +137,9 @@ static void *vga_gfx_init(const video_info_t *video, vga_gfx_create(); if (video->font_enable) - font_driver_init_osd(NULL, false, + font_driver_init_osd(NULL, + video, + false, video->is_threaded, FONT_DRIVER_RENDER_VGA); return vga; diff --git a/gfx/drivers/vita2d_gfx.c b/gfx/drivers/vita2d_gfx.c index df61bb9557..af862b2447 100644 --- a/gfx/drivers/vita2d_gfx.c +++ b/gfx/drivers/vita2d_gfx.c @@ -108,7 +108,9 @@ static void *vita2d_gfx_init(const video_info_t *video, #ifdef HAVE_OVERLAY vita->overlay_enable = false; #endif - font_driver_init_osd(vita, false, + font_driver_init_osd(vita, + video, + false, video->is_threaded, FONT_DRIVER_RENDER_VITA2D); diff --git a/gfx/drivers/vulkan.c b/gfx/drivers/vulkan.c index 04bf20dfd2..2b84933449 100644 --- a/gfx/drivers/vulkan.c +++ b/gfx/drivers/vulkan.c @@ -1262,7 +1262,9 @@ static void *vulkan_init(const video_info_t *video, video_context_driver_input_driver(&inp); if (video->font_enable) - font_driver_init_osd(vk, false, + font_driver_init_osd(vk, + video, + false, video->is_threaded, FONT_DRIVER_RENDER_VULKAN_API); diff --git a/gfx/font_driver.c b/gfx/font_driver.c index d7f9dfb9f1..dcbf105e7a 100644 --- a/gfx/font_driver.c +++ b/gfx/font_driver.c @@ -24,7 +24,6 @@ #include "font_driver.h" #include "video_thread_wrapper.h" -#include "../configuration.h" #include "../retroarch.h" #include "../verbosity.h" @@ -1155,19 +1154,18 @@ font_data_t *font_driver_init_first( void font_driver_init_osd( void *video_data, + const void *video_info_data, bool threading_hint, bool is_threaded, enum font_driver_render_api api) { - settings_t *settings = config_get_ptr(); - const char *path_font = settings->paths.path_font; - float video_font_size = settings->floats.video_font_size; - if (video_font_driver) + const video_info_t *video_info = (const video_info_t*)video_info_data; + if (video_font_driver || !video_info) return; video_font_driver = font_driver_init_first(video_data, - *path_font ? path_font : NULL, - video_font_size, threading_hint, is_threaded, api); + *video_info->path_font ? video_info->path_font : NULL, + video_info->font_size, threading_hint, is_threaded, api); if (!video_font_driver) RARCH_ERR("[font]: Failed to initialize OSD font.\n"); diff --git a/gfx/font_driver.h b/gfx/font_driver.h index 0c18d7efd2..9efff51ab8 100644 --- a/gfx/font_driver.h +++ b/gfx/font_driver.h @@ -153,9 +153,11 @@ font_data_t *font_driver_init_first( void font_driver_init_osd( void *video_data, + const void *video_info_data, bool threading_hint, bool is_threaded, enum font_driver_render_api api); + void font_driver_free_osd(void); int font_driver_get_line_height(void *font_data, float scale); diff --git a/retroarch.c b/retroarch.c index b1fae3ca3b..1394978923 100644 --- a/retroarch.c +++ b/retroarch.c @@ -20699,6 +20699,8 @@ static bool video_driver_init_internal(bool *video_is_threaded) #endif video.smooth = settings->bools.video_smooth; video.input_scale = scale; + video.font_size = settings->floats.video_font_size; + video.path_font = settings->paths.path_font; video.rgb32 = video_driver_state_filter ? video_driver_state_out_rgb32 : (video_driver_pix_fmt == RETRO_PIXEL_FORMAT_XRGB8888); @@ -20719,13 +20721,15 @@ static bool video_driver_init_internal(bool *video_is_threaded) if (video.is_threaded) { + bool ret; /* Can't do hardware rendering with threaded driver currently. */ RARCH_LOG("[Video]: Starting threaded video driver ...\n"); - if (!video_init_thread((const video_driver_t**)¤t_video, + ret = video_init_thread((const video_driver_t**)¤t_video, &video_driver_data, ¤t_input, (void**)¤t_input_data, - current_video, video)) + current_video, video); + if (!ret) { RARCH_ERR("[Video]: Cannot open threaded video driver ... Exiting ...\n"); goto error; diff --git a/retroarch.h b/retroarch.h index 47735f4c3c..f79cb95d25 100644 --- a/retroarch.h +++ b/retroarch.h @@ -1086,6 +1086,10 @@ typedef struct video_info */ unsigned input_scale; + const char *path_font; + + float font_size; + uintptr_t parent; } video_info_t;