Cut down on code duplication

This commit is contained in:
twinaphex 2015-12-05 11:29:06 +01:00
parent 5f27366cb3
commit 988162ed62
10 changed files with 42 additions and 76 deletions

View File

@ -401,7 +401,7 @@ static bool d3d_initialize(d3d_video_t *d3d, const video_info_t *info)
sizeof(settings->video.font_path)); sizeof(settings->video.font_path));
#endif #endif
if (!font_driver_init_first(NULL, NULL, if (!font_driver_init_first(NULL, NULL,
d3d, settings->video.font_path, 0, FONT_DRIVER_RENDER_DIRECT3D_API)) d3d, settings->video.font_path, 0, false, FONT_DRIVER_RENDER_DIRECT3D_API))
{ {
RARCH_ERR("[D3D]: Failed to initialize font renderer.\n"); RARCH_ERR("[D3D]: Failed to initialize font renderer.\n");
return false; return false;

View File

@ -2642,7 +2642,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo
if (settings->video.font_enable) if (settings->video.font_enable)
{ {
if (!font_driver_init_first(NULL, NULL, gl, *settings->video.font_path if (!font_driver_init_first(NULL, NULL, gl, *settings->video.font_path
? settings->video.font_path : NULL, settings->video.font_size, ? settings->video.font_path : NULL, settings->video.font_size, false,
FONT_DRIVER_RENDER_OPENGL_API)) FONT_DRIVER_RENDER_OPENGL_API))
RARCH_ERR("[GL]: Failed to initialize font renderer.\n"); RARCH_ERR("[GL]: Failed to initialize font renderer.\n");
} }

View File

@ -135,7 +135,7 @@ static void *vita2d_gfx_init(const video_info_t *video,
vita->overlay_enable = false; vita->overlay_enable = false;
#endif #endif
if (!font_driver_init_first(NULL, NULL, vita, *settings->video.font_path if (!font_driver_init_first(NULL, NULL, vita, *settings->video.font_path
? settings->video.font_path : NULL, settings->video.font_size, ? settings->video.font_path : NULL, settings->video.font_size, false,
FONT_DRIVER_RENDER_VITA2D)) FONT_DRIVER_RENDER_VITA2D))
{ {
RARCH_ERR("Font: Failed to initialize font renderer.\n"); RARCH_ERR("Font: Failed to initialize font renderer.\n");

View File

@ -15,6 +15,7 @@
*/ */
#include "font_driver.h" #include "font_driver.h"
#include "video_thread_wrapper.h"
#include "../general.h" #include "../general.h"
#ifdef HAVE_D3D #ifdef HAVE_D3D
@ -187,14 +188,40 @@ void font_driver_free(void *data)
bool font_driver_init_first(const void **font_driver, void *font_handle, bool font_driver_init_first(const void **font_driver, void *font_handle,
void *data, const char *font_path, float font_size, void *data, const char *font_path, float font_size,
bool threading_hint,
enum font_driver_render_api api) enum font_driver_render_api api)
{ {
settings_t *settings = config_get_ptr();
const struct retro_hw_render_callback *hw_render =
(const struct retro_hw_render_callback*)video_driver_callback();
driver_t *driver = driver_get_ptr(); driver_t *driver = driver_get_ptr();
const void **new_font_driver = font_driver ? font_driver const void **new_font_driver = font_driver ? font_driver
: (const void**)&driver->font_osd_driver; : (const void**)&driver->font_osd_driver;
void *new_font_handle = font_handle ? font_handle void *new_font_handle = font_handle ? font_handle
: &driver->font_osd_data; : &driver->font_osd_data;
if (threading_hint && settings->video.threaded && !hw_render->context_type)
{
thread_packet_t pkt;
thread_video_t *thr = (thread_video_t*)video_driver_get_ptr(true);
if (!thr)
return false;
pkt.type = CMD_FONT_INIT;
pkt.data.font_init.method = font_init_first;
pkt.data.font_init.font_driver = new_font_driver;
pkt.data.font_init.font_handle = new_font_handle;
pkt.data.font_init.video_data = data;
pkt.data.font_init.font_path = font_path;
pkt.data.font_init.font_size = font_size;
pkt.data.font_init.api = api;
thr->send_and_wait(thr, &pkt);
return pkt.data.font_init.return_value;
}
return font_init_first(new_font_driver, new_font_handle, return font_init_first(new_font_driver, new_font_handle,
data, font_path, font_size, api); data, font_path, font_size, api);
} }

View File

@ -71,7 +71,7 @@ void font_driver_free(void *data);
bool font_driver_init_first(const void **font_driver, void *font_handle, bool font_driver_init_first(const void **font_driver, void *font_handle,
void *data, const char *font_path, float font_size, void *data, const char *font_path, float font_size,
enum font_driver_render_api api); bool threading_hint, enum font_driver_render_api api);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -20,7 +20,6 @@
#include "../../config.def.h" #include "../../config.def.h"
#include "../../gfx/font_renderer_driver.h" #include "../../gfx/font_renderer_driver.h"
#include "../../gfx/video_context_driver.h" #include "../../gfx/video_context_driver.h"
#include "../../gfx/video_thread_wrapper.h"
#include "../../gfx/video_texture.h" #include "../../gfx/video_texture.h"
#include "../../gfx/d3d/d3d.h" #include "../../gfx/d3d/d3d.h"
#include "../../gfx/common/d3d_common.h" #include "../../gfx/common/d3d_common.h"
@ -238,38 +237,12 @@ static const float *menu_display_d3d_get_tex_coords(void)
return &d3d_tex_coords[0]; return &d3d_tex_coords[0];
} }
static bool menu_display_d3d_font_init_first(const void **font_driver, static bool menu_display_d3d_font_init_first(
void **font_handle, void *video_data, const char *font_path, void **font_handle, void *video_data, const char *font_path,
float font_size) float font_size)
{ {
settings_t *settings = config_get_ptr(); return font_driver_init_first(NULL, font_handle, video_data,
const struct retro_hw_render_callback *hw_render = font_path, font_size, true, FONT_DRIVER_RENDER_DIRECT3D_API);
(const struct retro_hw_render_callback*)video_driver_callback();
if (settings->video.threaded && !hw_render->context_type)
{
thread_packet_t pkt;
thread_video_t *thr = (thread_video_t*)video_driver_get_ptr(true);
if (!thr)
return false;
pkt.type = CMD_FONT_INIT;
pkt.data.font_init.method = font_init_first;
pkt.data.font_init.font_driver = (const void**)font_driver;
pkt.data.font_init.font_handle = font_handle;
pkt.data.font_init.video_data = video_data;
pkt.data.font_init.font_path = font_path;
pkt.data.font_init.font_size = font_size;
pkt.data.font_init.api = FONT_DRIVER_RENDER_DIRECT3D_API;
thr->send_and_wait(thr, &pkt);
return pkt.data.font_init.return_value;
}
return font_init_first(font_driver, font_handle, video_data,
font_path, font_size, FONT_DRIVER_RENDER_DIRECT3D_API);
} }
menu_display_ctx_driver_t menu_display_ctx_d3d = { menu_display_ctx_driver_t menu_display_ctx_d3d = {

View File

@ -18,7 +18,6 @@
#include "../../config.def.h" #include "../../config.def.h"
#include "../../gfx/font_renderer_driver.h" #include "../../gfx/font_renderer_driver.h"
#include "../../gfx/video_context_driver.h" #include "../../gfx/video_context_driver.h"
#include "../../gfx/video_thread_wrapper.h"
#include "../../gfx/video_texture.h" #include "../../gfx/video_texture.h"
#include "../../gfx/common/gl_common.h" #include "../../gfx/common/gl_common.h"
@ -213,38 +212,12 @@ static const float *menu_display_gl_get_tex_coords(void)
return &gl_tex_coords[0]; return &gl_tex_coords[0];
} }
static bool menu_display_gl_font_init_first(const void **font_driver, static bool menu_display_gl_font_init_first(
void **font_handle, void *video_data, const char *font_path, void **font_handle, void *video_data, const char *font_path,
float font_size) float font_size)
{ {
settings_t *settings = config_get_ptr(); return font_driver_init_first(NULL, font_handle, video_data,
const struct retro_hw_render_callback *hw_render = font_path, font_size, true, FONT_DRIVER_RENDER_OPENGL_API);
(const struct retro_hw_render_callback*)video_driver_callback();
if (settings->video.threaded && !hw_render->context_type)
{
thread_packet_t pkt;
thread_video_t *thr = (thread_video_t*)video_driver_get_ptr(true);
if (!thr)
return false;
pkt.type = CMD_FONT_INIT;
pkt.data.font_init.method = font_init_first;
pkt.data.font_init.font_driver = (const void**)font_driver;
pkt.data.font_init.font_handle = font_handle;
pkt.data.font_init.video_data = video_data;
pkt.data.font_init.font_path = font_path;
pkt.data.font_init.font_size = font_size;
pkt.data.font_init.api = FONT_DRIVER_RENDER_OPENGL_API;
thr->send_and_wait(thr, &pkt);
return pkt.data.font_init.return_value;
}
return font_init_first(font_driver, font_handle, video_data,
font_path, font_size, FONT_DRIVER_RENDER_OPENGL_API);
} }
menu_display_ctx_driver_t menu_display_ctx_gl = { menu_display_ctx_driver_t menu_display_ctx_gl = {

View File

@ -21,7 +21,6 @@
#include "../../config.def.h" #include "../../config.def.h"
#include "../../gfx/font_renderer_driver.h" #include "../../gfx/font_renderer_driver.h"
#include "../../gfx/video_context_driver.h" #include "../../gfx/video_context_driver.h"
#include "../../gfx/video_thread_wrapper.h"
#include "../../gfx/video_texture.h" #include "../../gfx/video_texture.h"
#include "../menu_display.h" #include "../menu_display.h"
@ -88,7 +87,7 @@ static const float *menu_display_null_get_tex_coords(void)
return &floats[0]; return &floats[0];
} }
static bool menu_display_null_font_init_first(const void **font_driver, static bool menu_display_null_font_init_first(
void **font_handle, void *video_data, const char *font_path, void **font_handle, void *video_data, const char *font_path,
float font_size) float font_size)
{ {

View File

@ -131,15 +131,15 @@ bool menu_display_init(void)
return true; return true;
} }
bool menu_display_font_init_first(const void **font_driver, static bool menu_display_font_init_first(void **font_handle,
void **font_handle, void *video_data, const char *font_path, void *video_data, const char *font_path,
float font_size) float font_size)
{ {
menu_display_ctx_driver_t *menu_disp = menu_display_context_get_ptr(); menu_display_ctx_driver_t *menu_disp = menu_display_context_get_ptr();
if (!menu_disp || !menu_disp->font_init_first) if (!menu_disp || !menu_disp->font_init_first)
return false; return false;
return menu_disp->font_init_first(font_driver, font_handle, video_data, return menu_disp->font_init_first(font_handle, video_data,
font_path, font_size); font_path, font_size);
} }
@ -239,7 +239,6 @@ bool menu_display_init_main_font(void *data,
const char *font_path, float font_size) const char *font_path, float font_size)
{ {
bool ret; bool ret;
driver_t *driver = driver_get_ptr();
void *video = video_driver_get_ptr(false); void *video = video_driver_get_ptr(false);
menu_display_t *disp = menu_display_get_ptr(); menu_display_t *disp = menu_display_get_ptr();
@ -250,7 +249,6 @@ bool menu_display_init_main_font(void *data,
menu_display_free_main_font(); menu_display_free_main_font();
ret = menu_display_font_init_first( ret = menu_display_font_init_first(
(const void**)&driver->font_osd_driver,
&disp->font.buf, video, &disp->font.buf, video,
font_path, font_size); font_path, font_size);

View File

@ -107,7 +107,7 @@ typedef struct menu_display_ctx_driver
const float *(*get_tex_coords)(void); const float *(*get_tex_coords)(void);
unsigned (*texture_load)(void *data, enum texture_filter_type type); unsigned (*texture_load)(void *data, enum texture_filter_type type);
void (*texture_unload)(uintptr_t *id); void (*texture_unload)(uintptr_t *id);
bool (*font_init_first)(const void **font_driver, bool (*font_init_first)(
void **font_handle, void *video_data, const char *font_path, void **font_handle, void *video_data, const char *font_path,
float font_size); float font_size);
enum menu_display_driver_type type; enum menu_display_driver_type type;
@ -118,10 +118,6 @@ void menu_display_free(void);
bool menu_display_init(void); bool menu_display_init(void);
bool menu_display_font_init_first(const void **font_driver,
void **font_handle, void *video_data, const char *font_path,
float font_size);
bool menu_display_font_bind_block(void *data, const void *font_data, void *userdata); bool menu_display_font_bind_block(void *data, const void *font_data, void *userdata);
bool menu_display_font_flush_block(void *data, const void *font_data); bool menu_display_font_flush_block(void *data, const void *font_data);