From b17e76d8b79e947f900e2851a7563d0a1e93d692 Mon Sep 17 00:00:00 2001 From: aliaspider Date: Sun, 21 May 2017 04:22:32 +0100 Subject: [PATCH] (WiiU) add freetype and stb font support. freetype disabled by default due to requiring an external library. --- Makefile.wiiu | 4 ++++ gfx/drivers_font_renderer/freetype.c | 31 ++++++++++++++++++++++--- gfx/drivers_font_renderer/stb_unicode.c | 17 ++++++++++++++ gfx/font_driver.c | 2 +- wiiu/include/wiiu/os/memory.h | 10 ++++++++ wiiu/system/imports.h | 1 + 6 files changed, 61 insertions(+), 4 deletions(-) diff --git a/Makefile.wiiu b/Makefile.wiiu index 296cff5406..b0e914de03 100644 --- a/Makefile.wiiu +++ b/Makefile.wiiu @@ -37,6 +37,8 @@ ifeq ($(GRIFFIN_BUILD), 1) OBJ += griffin/griffin.o DEFINES += -DHAVE_GRIFFIN=1 -DHAVE_MENU -DHAVE_RGUI -DHAVE_LIBRETRODB DEFINES += -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DWANT_ZLIB -DHAVE_CC_RESAMPLER + DEFINES += -DHAVE_STB_FONT +# DEFINES += -DHAVE_FREETYPE # DEFINES += -DHAVE_XMB -DHAVE_MATERIALUI else HAVE_MENU_COMMON = 1 @@ -52,6 +54,8 @@ else HAVE_ZARCH = 0 HAVE_MATERIALUI = 0 HAVE_XMB = 0 + HAVE_STB_FONT = 1 +# HAVE_FREETYPE = 1 include Makefile.common BLACKLIST := diff --git a/gfx/drivers_font_renderer/freetype.c b/gfx/drivers_font_renderer/freetype.c index cb7c37ce47..51017f8ec4 100644 --- a/gfx/drivers_font_renderer/freetype.c +++ b/gfx/drivers_font_renderer/freetype.c @@ -24,6 +24,10 @@ #include #include +#ifdef WIIU +#include +#endif + #include FT_FREETYPE_H #include "../font_driver.h" @@ -217,9 +221,26 @@ static void *font_renderer_ft_init(const char *font_path, float font_size) if (err) goto error; - err = FT_New_Face(handle->lib, font_path, 0, &handle->face); - if (err) - goto error; +#ifdef WIIU + if(!*font_path) + { + void* font_data = NULL; + uint32_t font_size = 0; + + if(!OSGetSharedData(SHARED_FONT_DEFAULT, 0, &font_data, &font_size)) + goto error; + + err = FT_New_Memory_Face(handle->lib, font_data, font_size, 0, &handle->face); + if (err) + goto error; + } + else +#endif + { + err = FT_New_Face(handle->lib, font_path, 0, &handle->face); + if (err) + goto error; + } err = FT_Select_Charmap(handle->face, FT_ENCODING_UNICODE); if (err) @@ -266,6 +287,9 @@ static const char *font_paths[] = { /* Highly OS/platform dependent. */ static const char *font_renderer_ft_get_default_font(void) { +#ifdef WIIU + return ""; +#else size_t i; for (i = 0; i < ARRAY_SIZE(font_paths); i++) @@ -275,6 +299,7 @@ static const char *font_renderer_ft_get_default_font(void) } return NULL; +#endif } static int font_renderer_ft_get_line_height(void* data) diff --git a/gfx/drivers_font_renderer/stb_unicode.c b/gfx/drivers_font_renderer/stb_unicode.c index abdc013ff8..e537861e22 100644 --- a/gfx/drivers_font_renderer/stb_unicode.c +++ b/gfx/drivers_font_renderer/stb_unicode.c @@ -20,6 +20,10 @@ #include #include +#ifdef WIIU +#include +#endif + #include "../font_driver.h" #include "../../verbosity.h" @@ -216,6 +220,15 @@ static void *font_renderer_stb_unicode_init(const char *font_path, float font_si /* See https://github.com/nothings/stb/blob/master/stb_truetype.h#L539 */ font_size = STBTT_POINT_SIZE(font_size); +#ifdef WIIU + if(!*font_path) + { + uint32_t size = 0; + if (!OSGetSharedData(SHARED_FONT_DEFAULT, 0, &self->font_data, &size)) + goto error; + } + else +#endif if (!filestream_read_file(font_path, (void**)&self->font_data, NULL)) goto error; @@ -245,6 +258,9 @@ error: static const char *font_renderer_stb_unicode_get_default_font(void) { +#ifdef WIIU + return ""; +#else static const char *paths[] = { #if defined(_WIN32) "C:\\Windows\\Fonts\\consola.ttf", @@ -286,6 +302,7 @@ static const char *font_renderer_stb_unicode_get_default_font(void) return *p; return NULL; +#endif } static int font_renderer_stb_unicode_get_line_height(void* data) diff --git a/gfx/font_driver.c b/gfx/font_driver.c index 215ad505ae..277a1b2c22 100644 --- a/gfx/font_driver.c +++ b/gfx/font_driver.c @@ -34,7 +34,7 @@ static const font_renderer_driver_t *font_backends[] = { &coretext_font_renderer, #endif #ifdef HAVE_STB_FONT -#if defined(VITA) || defined(ANDROID) || defined(_WIN32) && !defined(_XBOX) +#if defined(VITA) || defined(WIIU) || defined(ANDROID) || defined(_WIN32) && !defined(_XBOX) &stb_unicode_font_renderer, #else &stb_font_renderer, diff --git a/wiiu/include/wiiu/os/memory.h b/wiiu/include/wiiu/os/memory.h index 55d6aeb3d4..fdbfbf5311 100644 --- a/wiiu/include/wiiu/os/memory.h +++ b/wiiu/include/wiiu/os/memory.h @@ -5,6 +5,16 @@ extern "C" { #endif +typedef enum shared_data_type_t +{ + SHARED_FONT_CHINESE, + SHARED_FONT_KOREAN, + SHARED_FONT_DEFAULT, + SHARED_FONT_TAIWAN +} shared_data_type_t; + +BOOL OSGetSharedData(shared_data_type_t type, uint32_t flags, void **dst, uint32_t *size); + void *OSBlockMove(void *dst, const void *src, uint32_t size, BOOL flush); void *OSBlockSet(void *dst, uint8_t val, uint32_t size); uint32_t OSEffectiveToPhysical(void *vaddr); diff --git a/wiiu/system/imports.h b/wiiu/system/imports.h index f5f06d82bc..2c4a9c5346 100644 --- a/wiiu/system/imports.h +++ b/wiiu/system/imports.h @@ -29,6 +29,7 @@ IMPORT(OSYieldThread); IMPORT(OSGetSystemTime); IMPORT(OSGetSystemTick); IMPORT(OSGetSymbolName); +IMPORT(OSGetSharedData); IMPORT(OSEffectiveToPhysical); IMPORT(exit);