Skip to content

Commit 877ed20

Browse files
committed
(font drivers) Start using internal render_msg in video driver
directly instead of going through font_driver_render_msg - less indirection and overhead. First POC Vulkan driver. Needs font_driver_reshape_msg to be made a public function too
1 parent 564eff2 commit 877ed20

3 files changed

Lines changed: 36 additions & 13 deletions

File tree

gfx/drivers/vulkan.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5986,9 +5986,18 @@ static bool vulkan_frame(void *data, const void *frame,
59865986
else if (statistics_show)
59875987
{
59885988
if (osd_params)
5989-
font_driver_render_msg(vk,
5990-
stat_text,
5991-
osd_params, NULL);
5989+
{
5990+
#ifdef HAVE_LANGEXTRA
5991+
char tmp[512];
5992+
char *_msg = font_driver_reshape_msg(stat_text,
5993+
tmp, sizeof(tmp));
5994+
vulkan_font_render_msg(vk, video_font_driver,
5995+
_msg, osd_params);
5996+
#else
5997+
vulkan_font_render_msg(vk, video_font_driver,
5998+
stat_text, osd_params);
5999+
#endif
6000+
}
59926001
}
59936002
#endif
59946003

@@ -5998,7 +6007,16 @@ static bool vulkan_frame(void *data, const void *frame,
59986007
#endif
59996008

60006009
if (message_visible)
6001-
font_driver_render_msg(vk, msg, NULL, NULL);
6010+
{
6011+
#ifdef HAVE_LANGEXTRA
6012+
char tmp[512];
6013+
char *_msg = font_driver_reshape_msg(msg,
6014+
tmp, sizeof(tmp));
6015+
vulkan_font_render_msg(vk, video_font_driver, _msg, NULL);
6016+
#else
6017+
vulkan_font_render_msg(vk, video_font_driver, msg, NULL);
6018+
#endif
6019+
}
60026020

60036021
#ifdef HAVE_GFX_WIDGETS
60046022
if (widgets_active)

gfx/font_driver.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#include "video_thread_wrapper.h"
2727

2828
/* TODO/FIXME - global */
29-
static void *video_font_driver = NULL;
29+
void *video_font_driver = NULL;
3030

3131
int font_renderer_create_default(
3232
const font_renderer_driver_t **drv,
@@ -663,14 +663,14 @@ static INLINE unsigned font_get_arabic_replacement(
663663
}
664664
/* clang-format on */
665665

666-
static char* font_driver_reshape_msg(const char* msg, unsigned char *s, size_t len)
666+
char* font_driver_reshape_msg(const char* msg, char *s, size_t len)
667667
{
668668
const unsigned char *src;
669669
bool reverse = false;
670670
size_t msg_len = strlen(msg);
671671
/* worst case transformations are 2 bytes to 4 bytes -- aliaspider */
672672
size_t _len = (msg_len * 2) + 1;
673-
unsigned char *dst = s;
673+
char *dst = s;
674674

675675
if (len < _len)
676676
{
@@ -686,7 +686,7 @@ static char* font_driver_reshape_msg(const char* msg, unsigned char *s, size_t l
686686
* dst <= 2k while src = len/2 + k, and 2k < len/2 + k
687687
* holds for all k < len/2, which is guaranteed since
688688
* msg_len < len/2. */
689-
unsigned char *copy_dst;
689+
char *copy_dst;
690690
msg_len = (len / 2) - 1;
691691
/* Back up to a UTF-8 character boundary */
692692
while (msg_len > 0 && IS_MBCONT((const unsigned char*)&msg[msg_len]))
@@ -796,14 +796,14 @@ void font_driver_render_msg(void *data, const char *msg,
796796
if (renderer && renderer->render_msg)
797797
{
798798
#ifdef HAVE_LANGEXTRA
799-
unsigned char tmp_buffer[512];
800-
char *new_msg = font_driver_reshape_msg(msg,
801-
tmp_buffer, sizeof(tmp_buffer));
799+
char tmp[512];
800+
char *_msg = font_driver_reshape_msg(msg,
801+
tmp, sizeof(tmp));
802802
#else
803-
char *new_msg = (char*)msg;
803+
char *_msg = (char*)msg;
804804
#endif
805805
renderer->render_msg(data,
806-
font->renderer_data, new_msg, params);
806+
font->renderer_data, _msg, params);
807807
}
808808
}
809809

gfx/font_driver.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ void font_driver_init_osd(
135135

136136
void font_driver_free_osd(void);
137137

138+
char* font_driver_reshape_msg(const char* msg, char *s, size_t len);
139+
138140
int font_driver_get_line_height(font_data_t *font, float scale);
139141
int font_driver_get_line_ascender(font_data_t *font, float scale);
140142
int font_driver_get_line_descender(font_data_t *font, float scale);
@@ -166,6 +168,9 @@ extern font_renderer_driver_t freetype_font_renderer;
166168
extern font_renderer_driver_t coretext_font_renderer;
167169
extern font_renderer_driver_t bitmap_font_renderer;
168170

171+
/* TODO/FIXME - global */
172+
extern void *video_font_driver;
173+
169174
RETRO_END_DECLS
170175

171176
#endif

0 commit comments

Comments
 (0)