mirror of
https://github.com/libretro/RetroArch.git
synced 2026-11-09 03:29:43 -10:00
(Video) Hand the OSD font lifecycle up in 20 more drivers
Each of these created its OSD font inside its own init() and, where it
freed it at all, freed it inside its own free(). That makes the font's
lifetime depend on the driver's teardown path running, which is the
bug fixed for Vulkan in a725f60: a reinit that abandons the old
instance strands the font, and font_driver_init_osd() then no-ops
because video_font_driver is still set.
Set font_backend in the vtable and drop both calls. The layer above
now pairs creation and destruction around the driver instance, keyed
on ownership, so neither a skipped teardown nor an out-of-order one
can strand or steal the font.
Six of these never freed the font at all - caca, ctr, gx2, rsx,
switch_nx and vga leaked one OSD font per driver reinit. That stops
too, without those drivers gaining any teardown code.
Ordering constraints the drivers documented are preserved:
video_driver_free_internal() releases the font before calling the
driver's free(), and the threaded wrapper does so from CMD_FREE, so
the sdl2 requirement that the font go before SDL_DestroyRenderer still
holds - its comment is updated to say where.
rsx and sdl3 are deliberately left alone. Both gate creation on
video->font_enable, where every other driver creates unconditionally
and gates per-frame; migrating them would change when the atlas is
allocated. They need that difference resolved first.
Verification. These vtables are positional initializers whose tails
stop at varying points, so the risk is slot misalignment rather than
symbol error. The appended NULL padding and the backend pointer were
generated from the struct member list, and the result was checked by
counting surviving initializer entries against surviving struct
members under every combination of the preprocessor symbols appearing
in either - 216 configurations across all 41 vtables, requiring exact
equality for the 21 migrated drivers and no overrun for the rest. The
checker was negative-controlled by removing a backend entry and by
removing one pad slot; both are detected.
Only gl2, gl3 and video_driver.c could be compiled here; the platform
headers for the rest are unavailable. The vtable shape is verified as
above, and every backend symbol was confirmed declared in
font_driver.h and defined in the same translation unit as the vtable
that now names it.
This commit is contained in:
1 parent
f8b5e36f7b
commit
b815d731ab
20 files changed
+74
-133
No files matched your search
@@ -247,9 +247,6 @@ static void *caca_init(const video_info_t *video,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
font_driver_init_osd(caca, video,
|
||||
false, video->is_threaded,
|
||||
&caca_font);
|
||||
|
||||
return caca;
|
||||
}
|
||||
@@ -462,6 +459,9 @@ video_driver_t video_caca = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
NULL /* gfx_widgets_enabled */
|
||||
NULL /* gfx_widgets_enabled */,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&caca_font
|
||||
};
|
||||
@@ -1896,10 +1896,6 @@ 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, video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&ctr_font);
|
||||
|
||||
ctr->msg_rendering_enabled = true;
|
||||
ctr->menu_texture_frame_enable = false;
|
||||
@@ -3056,6 +3052,9 @@ video_driver_t video_ctr =
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
ctr_widgets_enabled
|
||||
ctr_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&ctr_font
|
||||
};
|
||||
+4
-7
@@ -2260,7 +2260,6 @@ static void d3d10_gfx_free(void* data)
|
||||
Release(d3d10->adapter);
|
||||
#endif
|
||||
|
||||
font_driver_free_osd();
|
||||
|
||||
#if 0
|
||||
video_st_flags = video_st->flags;
|
||||
@@ -2699,11 +2698,6 @@ static void *d3d10_gfx_init(const video_info_t* video,
|
||||
|
||||
d3d10->device->lpVtbl->RSSetState(d3d10->device, d3d10->state);
|
||||
|
||||
font_driver_init_osd(d3d10,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&d3d10_font);
|
||||
|
||||
|
||||
#if 0
|
||||
@@ -4011,6 +4005,9 @@ video_driver_t video_d3d10 = {
|
||||
d3d10_shader_load_begin,
|
||||
d3d10_shader_load_step,
|
||||
#if defined(HAVE_GFX_WIDGETS)
|
||||
d3d10_gfx_widgets_enabled
|
||||
d3d10_gfx_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&d3d10_font
|
||||
};
|
||||
+3
-8
@@ -2914,7 +2914,6 @@ static void d3d11_gfx_free(void* data)
|
||||
if (d3d11->flags & D3D11_ST_FLAG_WAITABLE_SWAPCHAINS)
|
||||
CloseHandle(d3d11->frameLatencyWaitableObject);
|
||||
|
||||
font_driver_free_osd();
|
||||
|
||||
#ifdef HAVE_OVERLAY
|
||||
d3d11_free_overlays(d3d11);
|
||||
@@ -3891,11 +3890,6 @@ static void *d3d11_gfx_init(const video_info_t* video,
|
||||
&d3d11->scissor_disabled);
|
||||
}
|
||||
|
||||
font_driver_init_osd(d3d11,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&d3d11_font);
|
||||
|
||||
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_D3D11)
|
||||
{
|
||||
@@ -6227,8 +6221,9 @@ video_driver_t video_d3d11 = {
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
#ifdef HAVE_DXGI_HDR
|
||||
d3d11_gfx_read_viewport_hdr
|
||||
d3d11_gfx_read_viewport_hdr,
|
||||
#else
|
||||
NULL /* read_viewport_hdr */
|
||||
NULL, /* read_viewport_hdr */
|
||||
#endif
|
||||
&d3d11_font
|
||||
};
|
||||
+3
-8
@@ -3760,7 +3760,6 @@ static void d3d12_gfx_free(void* data)
|
||||
if (d3d12->flags & D3D12_ST_FLAG_WAITABLE_SWAPCHAINS)
|
||||
CloseHandle(d3d12->chain.frameLatencyWaitableObject);
|
||||
|
||||
font_driver_free_osd();
|
||||
|
||||
#ifdef HAVE_OVERLAY
|
||||
d3d12_free_overlays(d3d12);
|
||||
@@ -4719,11 +4718,6 @@ static void *d3d12_gfx_init(const video_info_t* video,
|
||||
d3d12_release_texture(&d3d12->frame.texture[0]);
|
||||
d3d12_init_texture(d3d12->device, &d3d12->frame.texture[0]);
|
||||
|
||||
font_driver_init_osd(d3d12,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&d3d12_font);
|
||||
|
||||
if (video_driver_get_hw_context()->context_type == RETRO_HW_CONTEXT_D3D12)
|
||||
{
|
||||
@@ -8069,8 +8063,9 @@ video_driver_t video_d3d12 = {
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
#ifdef HAVE_DXGI_HDR
|
||||
d3d12_gfx_read_viewport_hdr
|
||||
d3d12_gfx_read_viewport_hdr,
|
||||
#else
|
||||
NULL /* read_viewport_hdr */
|
||||
NULL, /* read_viewport_hdr */
|
||||
#endif
|
||||
&d3d12_font
|
||||
};
|
||||
+4
-6
@@ -1915,7 +1915,6 @@ static void d3d8_deinitialize(d3d8_video_t *d3d)
|
||||
if (!d3d)
|
||||
return;
|
||||
chain = (d3d8_renderchain_t*)d3d->renderchain_data;
|
||||
font_driver_free_osd();
|
||||
|
||||
if (chain)
|
||||
{
|
||||
@@ -2315,10 +2314,6 @@ static bool d3d8_initialize(d3d8_video_t *d3d, const video_info_t *info)
|
||||
d3d8_set_viewport(d3d,
|
||||
d3d->vp.full_width, d3d->vp.full_height, false, true);
|
||||
|
||||
font_driver_init_osd(d3d, info,
|
||||
false,
|
||||
info->is_threaded,
|
||||
&d3d8_font);
|
||||
|
||||
d3d->menu_display.offset = 0;
|
||||
d3d->menu_display.size = 1024;
|
||||
@@ -3399,6 +3394,9 @@ video_driver_t video_d3d8 = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
d3d8_gfx_widgets_enabled
|
||||
d3d8_gfx_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&d3d8_font
|
||||
};
|
||||
@@ -3356,7 +3356,6 @@ static void d3d9_cg_deinitialize(d3d9_video_t *d3d)
|
||||
if (!d3d)
|
||||
return;
|
||||
|
||||
font_driver_free_osd();
|
||||
|
||||
d3d9_cg_deinit_chain(d3d);
|
||||
d3d9_vertex_buffer_free(d3d->menu_display.buffer,
|
||||
@@ -3781,10 +3780,6 @@ static bool d3d9_cg_initialize(d3d9_video_t *d3d, const video_info_t *info)
|
||||
d3d9_cg_set_viewport(d3d,
|
||||
d3d->vp.full_width, d3d->vp.full_height, false, true);
|
||||
|
||||
font_driver_init_osd(d3d, info,
|
||||
false,
|
||||
info->is_threaded,
|
||||
&d3d9_cg_font);
|
||||
|
||||
{
|
||||
static const D3DVERTEXELEMENT9 VertexElements[4] = {
|
||||
@@ -5046,6 +5041,9 @@ video_driver_t video_d3d9_cg = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
d3d9_cg_gfx_widgets_enabled
|
||||
d3d9_cg_gfx_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&d3d9_cg_font
|
||||
};
|
||||
@@ -6605,7 +6605,6 @@ static uint32_t d3d9_hlsl_get_flags(void *data)
|
||||
|
||||
static void d3d9_hlsl_deinitialize(d3d9_video_t *d3d)
|
||||
{
|
||||
font_driver_free_osd();
|
||||
|
||||
hlsl_d3d9_renderchain_free(d3d->renderchain_data);
|
||||
|
||||
@@ -7046,10 +7045,6 @@ static bool d3d9_hlsl_initialize(
|
||||
d3d9_hlsl_set_viewport(d3d,
|
||||
d3d->vp.full_width, d3d->vp.full_height, false, true);
|
||||
|
||||
font_driver_init_osd(d3d, info,
|
||||
false,
|
||||
info->is_threaded,
|
||||
&d3d9_font);
|
||||
|
||||
{
|
||||
static const D3DVERTEXELEMENT9 VertexElements[4] = {
|
||||
@@ -8414,6 +8409,9 @@ video_driver_t video_d3d9_hlsl = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
d3d9_hlsl_gfx_widgets_enabled
|
||||
d3d9_hlsl_gfx_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&d3d9_font
|
||||
};
|
||||
@@ -2569,11 +2569,6 @@ static void *gdi_init(const video_info_t *video,
|
||||
|
||||
gfx_ctx_gdi_input_driver(input, input_data);
|
||||
|
||||
font_driver_init_osd(gdi,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&gdi_font);
|
||||
|
||||
RARCH_LOG("[GDI] Init complete.\n");
|
||||
|
||||
@@ -3282,7 +3277,6 @@ static void gdi_free(void *data)
|
||||
gdi->winDC = 0;
|
||||
}
|
||||
|
||||
font_driver_free_osd();
|
||||
gfx_ctx_gdi_destroy();
|
||||
free(gdi);
|
||||
}
|
||||
@@ -3909,6 +3903,9 @@ video_driver_t video_gdi = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
gdi_gfx_widgets_enabled
|
||||
gdi_gfx_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&gdi_font
|
||||
};
|
||||
+2
-7
@@ -1504,11 +1504,6 @@ static void *gl1_init(const video_info_t *video,
|
||||
input, input_data);
|
||||
}
|
||||
|
||||
font_driver_init_osd(gl1,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&gl1_raster_font);
|
||||
|
||||
if (video_smooth)
|
||||
gl1->flags |= GL1_FLAG_SMOOTH;
|
||||
@@ -2800,7 +2795,6 @@ static void gl1_free(void *data)
|
||||
string_list_free(gl1->extensions);
|
||||
gl1->extensions = NULL;
|
||||
|
||||
font_driver_free_osd();
|
||||
if (gl1->ctx_driver && gl1->ctx_driver->destroy)
|
||||
gl1->ctx_driver->destroy(gl1->ctx_data);
|
||||
video_context_driver_free();
|
||||
@@ -3508,5 +3502,6 @@ video_driver_t video_gl1 = {
|
||||
gl1_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
gl1_read_viewport_hdr
|
||||
gl1_read_viewport_hdr,
|
||||
&gl1_raster_font
|
||||
};
|
||||
+2
-6
@@ -4606,7 +4606,6 @@ static void gl2_free(void *data)
|
||||
(gl2_renderchain_data_t*)
|
||||
gl->renderchain_data);
|
||||
|
||||
font_driver_free_osd();
|
||||
|
||||
gl->shader->deinit(gl->shader_data);
|
||||
|
||||
@@ -5469,10 +5468,6 @@ static void *gl2_init(const video_info_t *video,
|
||||
input, input_data);
|
||||
}
|
||||
|
||||
font_driver_init_osd(gl, video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&gl2_raster_font);
|
||||
|
||||
/* Only bother with PBO readback if we're doing GPU recording.
|
||||
* Check recording_st->enable and not
|
||||
@@ -6463,5 +6458,6 @@ video_driver_t video_gl2 = {
|
||||
gl2_gfx_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
gl2_read_viewport_hdr
|
||||
gl2_read_viewport_hdr,
|
||||
&gl2_raster_font
|
||||
};
|
||||
+2
-7
@@ -3190,11 +3190,6 @@ static void *gl3_init(const video_info_t *video,
|
||||
goto error;
|
||||
}
|
||||
|
||||
font_driver_init_osd(gl,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&gl3_raster_font);
|
||||
|
||||
if (video_gpu_record
|
||||
&& recording_state_get_ptr()->enable)
|
||||
@@ -3424,7 +3419,6 @@ static void gl3_free(void *data)
|
||||
|
||||
if (gl->flags & GL3_FLAG_USE_SHARED_CONTEXT)
|
||||
gl->ctx_driver->bind_hw_render(gl->ctx_data, false);
|
||||
font_driver_free_osd();
|
||||
gl3_destroy_resources(gl);
|
||||
if (gl->ctx_driver && gl->ctx_driver->destroy)
|
||||
gl->ctx_driver->destroy(gl->ctx_data);
|
||||
@@ -5717,5 +5711,6 @@ video_driver_t video_gl3 = {
|
||||
gl3_gfx_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
gl3_read_viewport_hdr
|
||||
gl3_read_viewport_hdr,
|
||||
&gl3_raster_font
|
||||
};
|
||||
@@ -1392,11 +1392,6 @@ static void *gx2_init(const video_info_t *video,
|
||||
|
||||
driver_ctl(RARCH_DRIVER_CTL_SET_REFRESH_RATE, &refresh_rate);
|
||||
|
||||
font_driver_init_osd(wiiu,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&wiiu_font);
|
||||
|
||||
{
|
||||
enum rarch_shader_type type;
|
||||
@@ -2708,6 +2703,9 @@ video_driver_t video_wiiu =
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
gx2_widgets_enabled
|
||||
gx2_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&wiiu_font
|
||||
};
|
||||
@@ -2084,11 +2084,6 @@ static void *gxm_gfx_init(const video_info_t *video,
|
||||
#ifdef HAVE_OVERLAY
|
||||
vita->overlay_enable = false;
|
||||
#endif
|
||||
font_driver_init_osd(vita,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&gxm_font);
|
||||
|
||||
return vita;
|
||||
}
|
||||
@@ -2441,7 +2436,6 @@ static void gxm_free(void *data)
|
||||
vita->texture = NULL;
|
||||
}
|
||||
|
||||
font_driver_free_osd();
|
||||
}
|
||||
|
||||
static void gxm_set_projection(vita_video_t *vita,
|
||||
@@ -3034,6 +3028,9 @@ video_driver_t video_gxm = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
gxm_widgets_enabled
|
||||
gxm_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&gxm_font
|
||||
};
|
||||
+2
-7
@@ -4217,11 +4217,6 @@ static void metal_pull_cached_frame_cb(void *userdata,
|
||||
/* Overlay view */
|
||||
_overlay = [[Overlay alloc] initWithContext:_context];
|
||||
|
||||
font_driver_init_osd((__bridge void *)self,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&metal_raster_font);
|
||||
|
||||
/* Tell Context to allocate HDR offscreen + readback textures and
|
||||
* compile its composite/tonemap pipelines. By this point the CAMetalLayer's
|
||||
@@ -4294,7 +4289,6 @@ static void metal_pull_cached_frame_cb(void *userdata,
|
||||
free(_viewport);
|
||||
_viewport = nil;
|
||||
}
|
||||
font_driver_free_osd();
|
||||
|
||||
/* Tear down the GPU list we published to the frontend. We clear
|
||||
* the slot first so any later code paths (e.g. the menu cbs) that
|
||||
@@ -6718,5 +6712,6 @@ video_driver_t video_metal = {
|
||||
metal_widgets_enabled,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
metal_read_viewport_hdr
|
||||
metal_read_viewport_hdr,
|
||||
&metal_raster_font
|
||||
};
|
||||
@@ -855,10 +855,6 @@ static void *ps2_init(const video_info_t *video,
|
||||
return NULL;
|
||||
|
||||
init_ps2_video(ps2);
|
||||
font_driver_init_osd(ps2,
|
||||
video, false,
|
||||
video->is_threaded,
|
||||
&ps2_font);
|
||||
|
||||
ps2->PSM = (video->rgb32 ? GS_PSM_CT32 : GS_PSM_CT16);
|
||||
ps2->tex_filter = video->smooth ? GS_FILTER_LINEAR : GS_FILTER_NEAREST;
|
||||
@@ -1043,7 +1039,6 @@ static void ps2_free(void *data)
|
||||
gsKit_clear(ps2->gsGlobal, GS_BLACK);
|
||||
gsKit_vram_clear(ps2->gsGlobal);
|
||||
|
||||
font_driver_free_osd();
|
||||
|
||||
ps2_deinit_texture(ps2->menuTexture);
|
||||
ps2_deinit_texture(ps2->coreTexture);
|
||||
@@ -1218,6 +1213,9 @@ video_driver_t video_ps2 = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
NULL /* gfx_widgets_enabled */
|
||||
NULL /* gfx_widgets_enabled */,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&ps2_font
|
||||
};
|
||||
+8
-12
@@ -465,8 +465,6 @@ static void *sdl2_gfx_init(const video_info_t *video,
|
||||
* We also gain a working render_msg path for any other RA
|
||||
* subsystem that calls font_driver_render_msg with NULL font -
|
||||
* this is the same wiring every other modern driver does. */
|
||||
font_driver_init_osd(vid, video, false, video->is_threaded,
|
||||
&sdl2_raster_font);
|
||||
#endif
|
||||
|
||||
*input = NULL;
|
||||
@@ -763,14 +761,9 @@ static void sdl2_gfx_free(void *data)
|
||||
if (!vid)
|
||||
return;
|
||||
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 18)
|
||||
/* Mirror font_driver_init_osd in sdl2_gfx_init. Must run before
|
||||
* SDL_DestroyRenderer because the OSD font owns SDL_Textures
|
||||
* created against vid->renderer; tearing the renderer down first
|
||||
* would leave the font driver holding dangling texture pointers
|
||||
* for the next free() call. */
|
||||
font_driver_free_osd();
|
||||
#endif
|
||||
/* The OSD font owns SDL_Textures created against vid->renderer and
|
||||
* must go before SDL_DestroyRenderer below. It does:
|
||||
* video_driver_free_internal() releases it before calling this. */
|
||||
|
||||
#ifdef HAVE_OVERLAY
|
||||
/* Same constraint - overlay textures are owned by vid->renderer.
|
||||
@@ -2205,9 +2198,12 @@ video_driver_t video_sdl2 = {
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 18)
|
||||
sdl2_gfx_widgets_enabled
|
||||
sdl2_gfx_widgets_enabled,
|
||||
#else
|
||||
NULL /* widgets need SDL_RenderGeometry */
|
||||
NULL, /* widgets need SDL_RenderGeometry */
|
||||
#endif
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&sdl2_raster_font
|
||||
};
|
||||
@@ -309,11 +309,6 @@ static void *sixel_gfx_init(const video_info_t *video,
|
||||
*input_data = NULL;
|
||||
}
|
||||
|
||||
font_driver_init_osd(sixel,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&sixel_font);
|
||||
|
||||
return sixel;
|
||||
}
|
||||
@@ -534,7 +529,6 @@ static void sixel_gfx_free(void *data)
|
||||
sixel_temp_buf = NULL;
|
||||
}
|
||||
|
||||
font_driver_free_osd();
|
||||
|
||||
if (sixel)
|
||||
free(sixel);
|
||||
@@ -668,6 +662,9 @@ video_driver_t video_sixel = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
NULL /* gfx_widgets_enabled */
|
||||
NULL /* gfx_widgets_enabled */,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&sixel_font
|
||||
};
|
||||
@@ -555,11 +555,6 @@ static void *switch_init(const video_info_t *video,
|
||||
*input_data = switchinput;
|
||||
}
|
||||
|
||||
font_driver_init_osd(sw,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded,
|
||||
&switch_font);
|
||||
|
||||
clear_screen(sw);
|
||||
|
||||
@@ -1005,8 +1000,11 @@ video_driver_t video_switch = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
NULL /* gfx_widgets_enabled */
|
||||
NULL /* gfx_widgets_enabled */,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&switch_font
|
||||
};
|
||||
|
||||
/* vim: set ts=3 sw=3 */
|
||||
@@ -217,10 +217,6 @@ static void *vga_gfx_init(const video_info_t *video,
|
||||
|
||||
vga_gfx_create();
|
||||
|
||||
font_driver_init_osd(NULL,
|
||||
video,
|
||||
false,
|
||||
video->is_threaded, &vga_font);
|
||||
|
||||
return vga;
|
||||
}
|
||||
@@ -531,6 +527,9 @@ video_driver_t video_vga = {
|
||||
NULL, /* shader_load_begin */
|
||||
NULL, /* shader_load_step */
|
||||
#ifdef HAVE_GFX_WIDGETS
|
||||
NULL /* gfx_widgets_enabled */
|
||||
NULL /* gfx_widgets_enabled */,
|
||||
#endif
|
||||
NULL, /* invalidate_hw_render_cache */
|
||||
NULL, /* read_viewport_hdr */
|
||||
&vga_font
|
||||
};
|
||||
Reference in new issue
Block a user