mirror of
https://github.com/CTCaer/RetroArch.git
synced 2025-02-01 09:12:35 +00:00
Start creating font driver wrapper functions
This commit is contained in:
parent
63c12b0083
commit
89721b8837
@ -107,16 +107,10 @@ static void d3d_deinit_chain(d3d_video_t *d3d)
|
||||
|
||||
static void d3d_deinitialize(d3d_video_t *d3d)
|
||||
{
|
||||
driver_t *driver = driver_get_ptr();
|
||||
const font_renderer_t *font_ctx = NULL;
|
||||
if (!d3d)
|
||||
return;
|
||||
|
||||
font_ctx = (const font_renderer_t*)driver->font_osd_driver;
|
||||
|
||||
if (font_ctx->free)
|
||||
font_ctx->free(driver->font_osd_data);
|
||||
font_ctx = NULL;
|
||||
font_driver_free();
|
||||
d3d_deinit_chain(d3d);
|
||||
}
|
||||
|
||||
@ -406,8 +400,7 @@ static bool d3d_initialize(d3d_video_t *d3d, const video_info_t *info)
|
||||
strlcpy(settings->video.font_path, "game:\\media\\Arial_12.xpr",
|
||||
sizeof(settings->video.font_path));
|
||||
#endif
|
||||
if (!font_init_first((const void**)&driver->font_osd_driver, &driver->font_osd_data,
|
||||
d3d, settings->video.font_path, 0, FONT_DRIVER_RENDER_DIRECT3D_API))
|
||||
if (!font_driver_init_first(d3d, settings->video.font_path, 0, FONT_DRIVER_RENDER_DIRECT3D_API))
|
||||
{
|
||||
RARCH_ERR("[D3D]: Failed to initialize font renderer.\n");
|
||||
return false;
|
||||
@ -528,14 +521,11 @@ static void d3d_set_osd_msg(void *data, const char *msg,
|
||||
const struct font_params *params, void *font)
|
||||
{
|
||||
d3d_video_t *d3d = (d3d_video_t*)data;
|
||||
driver_t *driver = driver_get_ptr();
|
||||
const font_renderer_t *font_ctx = driver->font_osd_driver;
|
||||
|
||||
if (d3d->renderchain_driver->set_font_rect && params)
|
||||
d3d->renderchain_driver->set_font_rect(d3d, params);
|
||||
|
||||
if (font_ctx->render_msg)
|
||||
font_ctx->render_msg(driver->font_osd_data, msg, params);
|
||||
font_driver_render_msg(msg, params);
|
||||
}
|
||||
|
||||
/* Delay constructor due to lack of exceptions. */
|
||||
@ -1505,7 +1495,7 @@ static bool d3d_frame(void *data, const void *frame,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (font_ctx->render_msg && msg)
|
||||
if (font_driver_has_render_msg() && msg)
|
||||
{
|
||||
struct font_params font_parms = {0};
|
||||
#ifdef _XBOX
|
||||
@ -1520,7 +1510,7 @@ static bool d3d_frame(void *data, const void *frame,
|
||||
font_parms.y = msg_height;
|
||||
font_parms.scale = 21;
|
||||
#endif
|
||||
font_ctx->render_msg(driver->font_osd_data, msg, &font_parms);
|
||||
font_driver_render_msg(msg, &font_params);
|
||||
}
|
||||
|
||||
#ifdef HAVE_MENU
|
||||
|
@ -1637,9 +1637,7 @@ static bool gl_frame(void *data, const void *frame,
|
||||
struct gfx_tex_info feedback_info;
|
||||
static struct retro_perf_counter frame_run = {0};
|
||||
gl_t *gl = (gl_t*)data;
|
||||
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_perf_init(&frame_run, "frame_run");
|
||||
retro_perf_start(&frame_run);
|
||||
@ -1796,8 +1794,8 @@ static bool gl_frame(void *data, const void *frame,
|
||||
}
|
||||
#endif
|
||||
|
||||
if (msg && driver->font_osd_driver && driver->font_osd_data)
|
||||
font_driver->render_msg(driver->font_osd_data, msg, NULL);
|
||||
if (msg)
|
||||
font_driver_render_msg(msg, NULL);
|
||||
|
||||
#ifdef HAVE_OVERLAY
|
||||
if (gl->overlay_enable)
|
||||
@ -1916,10 +1914,6 @@ 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 = driver ?
|
||||
driver->font_osd_driver : NULL;
|
||||
|
||||
if (!gl)
|
||||
return;
|
||||
|
||||
@ -1940,8 +1934,7 @@ static void gl_free(void *data)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (font_driver && driver->font_osd_data)
|
||||
font_driver->free(driver->font_osd_data);
|
||||
font_driver_free();
|
||||
gl_shader_deinit(gl);
|
||||
|
||||
#ifndef NO_GL_FF_VERTEX
|
||||
@ -2453,8 +2446,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo
|
||||
const char *version = NULL;
|
||||
struct retro_hw_render_callback *hw_render = NULL;
|
||||
settings_t *settings = config_get_ptr();
|
||||
driver_t *driver = driver_get_ptr();
|
||||
gl_t *gl = (gl_t*)calloc(1, sizeof(gl_t));
|
||||
gl_t *gl = (gl_t*)calloc(1, sizeof(gl_t));
|
||||
if (!gl)
|
||||
return NULL;
|
||||
|
||||
@ -2649,8 +2641,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((const void**)&driver->font_osd_driver, &driver->font_osd_data,
|
||||
gl, *settings->video.font_path
|
||||
if (!font_driver_init_first(gl, *settings->video.font_path
|
||||
? settings->video.font_path : NULL, settings->video.font_size,
|
||||
FONT_DRIVER_RENDER_OPENGL_API))
|
||||
RARCH_ERR("[GL]: Failed to initialize font renderer.\n");
|
||||
|
@ -142,3 +142,40 @@ bool font_init_first(const void **font_driver, void **font_handle,
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool font_driver_has_render_msg(void)
|
||||
{
|
||||
driver_t *driver = driver_get_ptr();
|
||||
const font_renderer_t *font_ctx = driver->font_osd_driver;
|
||||
if (!font_ctx || !font_ctx->render_msg)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void font_driver_render_msg(const char *msg, const struct font_params *params)
|
||||
{
|
||||
driver_t *driver = driver_get_ptr();
|
||||
const font_renderer_t *font_ctx = driver->font_osd_driver;
|
||||
|
||||
if (font_ctx->render_msg)
|
||||
font_ctx->render_msg(driver->font_osd_data, msg, params);
|
||||
}
|
||||
|
||||
void font_driver_free(void)
|
||||
{
|
||||
driver_t *driver = driver_get_ptr();
|
||||
const font_renderer_t *font_ctx = (const font_renderer_t*)driver->font_osd_driver;
|
||||
|
||||
if (font_ctx->free)
|
||||
font_ctx->free(driver->font_osd_data);
|
||||
driver->font_osd_data = NULL;
|
||||
driver->font_osd_driver = NULL;
|
||||
}
|
||||
|
||||
bool font_driver_init_first(void *data, const char *font_path, float font_size,
|
||||
enum font_driver_render_api api)
|
||||
{
|
||||
driver_t *driver = driver_get_ptr();
|
||||
return font_init_first((const void**)&driver->font_osd_driver, &driver->font_osd_data,
|
||||
data, font_path, font_size, api);
|
||||
}
|
||||
|
@ -33,11 +33,43 @@ enum font_driver_render_api
|
||||
FONT_DRIVER_RENDER_VITA2D
|
||||
};
|
||||
|
||||
enum text_alignment
|
||||
{
|
||||
TEXT_ALIGN_LEFT = 0,
|
||||
TEXT_ALIGN_RIGHT,
|
||||
TEXT_ALIGN_CENTER
|
||||
};
|
||||
|
||||
struct font_params
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float scale;
|
||||
/* Drop shadow color multiplier. */
|
||||
float drop_mod;
|
||||
/* Drop shadow offset.
|
||||
* If both are 0, no drop shadow will be rendered. */
|
||||
int drop_x, drop_y;
|
||||
/* ABGR. Use the macros. */
|
||||
uint32_t color;
|
||||
bool full_screen;
|
||||
enum text_alignment text_align;
|
||||
};
|
||||
|
||||
bool font_init_first(
|
||||
const void **font_driver, void **font_handle,
|
||||
void *video_data, const char *font_path, float font_size,
|
||||
enum font_driver_render_api api);
|
||||
|
||||
bool font_driver_has_render_msg(void);
|
||||
|
||||
void font_driver_render_msg(const char *msg, const struct font_params *params);
|
||||
|
||||
void font_driver_free(void);
|
||||
|
||||
bool font_driver_init_first(void *data, const char *font_path, float font_size,
|
||||
enum font_driver_render_api api);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -808,8 +808,6 @@ bool video_driver_get_video_output_size(unsigned *width, unsigned *height)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void video_driver_set_osd_msg(const char *msg,
|
||||
const struct font_params *params, void *font)
|
||||
{
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <sys/types.h>
|
||||
#include <boolean.h>
|
||||
#include <gfx/scaler/scaler.h>
|
||||
#include "font_driver.h"
|
||||
#include "video_filter.h"
|
||||
#include "video_shader_parse.h"
|
||||
|
||||
@ -33,13 +34,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum text_alignment
|
||||
{
|
||||
TEXT_ALIGN_LEFT = 0,
|
||||
TEXT_ALIGN_RIGHT,
|
||||
TEXT_ALIGN_CENTER
|
||||
};
|
||||
|
||||
enum texture_filter_type
|
||||
{
|
||||
TEXTURE_FILTER_LINEAR = 0,
|
||||
@ -71,23 +65,6 @@ typedef struct video_info
|
||||
bool rgb32;
|
||||
} video_info_t;
|
||||
|
||||
|
||||
struct font_params
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float scale;
|
||||
/* Drop shadow color multiplier. */
|
||||
float drop_mod;
|
||||
/* Drop shadow offset.
|
||||
* If both are 0, no drop shadow will be rendered. */
|
||||
int drop_x, drop_y;
|
||||
/* ABGR. Use the macros. */
|
||||
uint32_t color;
|
||||
bool full_screen;
|
||||
enum text_alignment text_align;
|
||||
};
|
||||
|
||||
#define FONT_COLOR_RGBA(r, g, b, a) (((r) << 24) | ((g) << 16) | ((b) << 8) | ((a) << 0))
|
||||
#define FONT_COLOR_GET_RED(col) (((col) >> 24) & 0xff)
|
||||
#define FONT_COLOR_GET_GREEN(col) (((col) >> 16) & 0xff)
|
||||
|
Loading…
x
Reference in New Issue
Block a user