Take font driver handles out of driver_t struct

This commit is contained in:
twinaphex 2015-12-05 12:25:53 +01:00
parent 612c05ac71
commit 6a00c1cf9a
2 changed files with 19 additions and 26 deletions

View File

@ -194,9 +194,6 @@ typedef struct driver
const location_driver_t *location; const location_driver_t *location;
const record_driver_t *recording; const record_driver_t *recording;
struct retro_callbacks retro_ctx; struct retro_callbacks retro_ctx;
const struct font_renderer *font_osd_driver;
void *font_osd_data;
void *camera_data; void *camera_data;
void *location_data; void *location_data;
void *recording_data; void *recording_data;

View File

@ -33,15 +33,18 @@ static const font_renderer_driver_t *font_backends[] = {
NULL NULL
}; };
static const struct font_renderer *font_osd_driver;
static void *font_osd_data;
int font_renderer_get_message_width(const char *msg, float scale) int font_renderer_get_message_width(const char *msg, float scale)
{ {
driver_t *driver = driver_get_ptr(); const struct font_renderer *font_driver = font_osd_driver;
const struct font_renderer *font_driver = driver ? driver->font_osd_driver : NULL;
if (!font_driver || !font_driver->get_message_width) if (!font_driver || !font_driver->get_message_width)
return 0; return 0;
return font_driver->get_message_width(driver->font_osd_data, msg, strlen(msg), scale); return font_driver->get_message_width(font_osd_data, msg, strlen(msg), scale);
} }
int font_renderer_create_default(const void **data, void **handle, int font_renderer_create_default(const void **data, void **handle,
@ -207,8 +210,7 @@ bool font_init_first(const void **font_driver, void **font_handle,
bool font_driver_has_render_msg(void) bool font_driver_has_render_msg(void)
{ {
driver_t *driver = driver_get_ptr(); const font_renderer_t *font_ctx = font_osd_driver;
const font_renderer_t *font_ctx = driver->font_osd_driver;
if (!font_ctx || !font_ctx->render_msg) if (!font_ctx || !font_ctx->render_msg)
return false; return false;
return true; return true;
@ -216,18 +218,16 @@ bool font_driver_has_render_msg(void)
void font_driver_render_msg(void *font_data, const char *msg, const struct font_params *params) void font_driver_render_msg(void *font_data, const char *msg, const struct font_params *params)
{ {
driver_t *driver = driver_get_ptr(); const font_renderer_t *font_ctx = font_osd_driver;
const font_renderer_t *font_ctx = driver->font_osd_driver;
if (font_ctx->render_msg) if (font_ctx->render_msg)
font_ctx->render_msg(font_data ? font_data : driver->font_osd_data, msg, params); font_ctx->render_msg(font_data ? font_data : font_osd_data, msg, params);
} }
void font_driver_bind_block(void *font_data, void *block) void font_driver_bind_block(void *font_data, void *block)
{ {
driver_t *driver = driver_get_ptr(); const font_renderer_t *font_ctx = font_osd_driver;
const font_renderer_t *font_ctx = driver->font_osd_driver; void *new_font_data = font_data ? font_data : font_osd_data;
void *new_font_data = font_data ? font_data : driver->font_osd_data;
if (font_ctx->bind_block) if (font_ctx->bind_block)
font_ctx->bind_block(new_font_data, block); font_ctx->bind_block(new_font_data, block);
@ -235,8 +235,7 @@ void font_driver_bind_block(void *font_data, void *block)
void font_driver_flush(void *data) void font_driver_flush(void *data)
{ {
driver_t *driver = driver_get_ptr(); const font_renderer_t *font_ctx = font_osd_driver;
const font_renderer_t *font_ctx = driver->font_osd_driver;
if (font_ctx->flush) if (font_ctx->flush)
font_ctx->flush(data); font_ctx->flush(data);
@ -244,8 +243,7 @@ void font_driver_flush(void *data)
int font_driver_get_message_width(void *data, const char *msg, unsigned len, float scale) int font_driver_get_message_width(void *data, const char *msg, unsigned len, float scale)
{ {
driver_t *driver = driver_get_ptr(); const font_renderer_t *font_ctx = font_osd_driver;
const font_renderer_t *font_ctx = driver->font_osd_driver;
if (!font_ctx || !font_ctx->get_message_width) if (!font_ctx || !font_ctx->get_message_width)
return -1; return -1;
@ -254,17 +252,16 @@ int font_driver_get_message_width(void *data, const char *msg, unsigned len, flo
void font_driver_free(void *data) void font_driver_free(void *data)
{ {
driver_t *driver = driver_get_ptr(); const font_renderer_t *font_ctx = (const font_renderer_t*)font_osd_driver;
const font_renderer_t *font_ctx = (const font_renderer_t*)driver->font_osd_driver;
if (font_ctx->free) if (font_ctx->free)
font_ctx->free(data ? data : driver->font_osd_data); font_ctx->free(data ? data : font_osd_data);
if (data) if (data)
return; return;
driver->font_osd_data = NULL; font_osd_data = NULL;
driver->font_osd_driver = NULL; font_osd_driver = NULL;
} }
bool font_driver_init_first(const void **font_driver, void *font_handle, bool font_driver_init_first(const void **font_driver, void *font_handle,
@ -275,11 +272,10 @@ bool font_driver_init_first(const void **font_driver, void *font_handle,
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
const struct retro_hw_render_callback *hw_render = const struct retro_hw_render_callback *hw_render =
(const struct retro_hw_render_callback*)video_driver_callback(); (const struct retro_hw_render_callback*)video_driver_callback();
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**)&font_osd_driver;
void *new_font_handle = font_handle ? font_handle void *new_font_handle = font_handle ? font_handle
: &driver->font_osd_data; : &font_osd_data;
if (threading_hint && settings->video.threaded && !hw_render->context_type) if (threading_hint && settings->video.threaded && !hw_render->context_type)
{ {