diff --git a/console/griffin/griffin.c b/console/griffin/griffin.c index b12eac638f..26fdb654e5 100644 --- a/console/griffin/griffin.c +++ b/console/griffin/griffin.c @@ -209,6 +209,10 @@ FONTS #include "../../gfx/fonts/gl_font.c" #endif +#ifdef _XBOX +#include "../../gfx/fonts/d3d_font.c" +#endif + #if defined(HAVE_LIBDBGFONT) #include "../../gfx/fonts/ps_libdbgfont.c" #elif defined(HAVE_OPENGL) diff --git a/gfx/context/xdk_ctx.c b/gfx/context/xdk_ctx.c index 2977bfe4c6..3f904083d3 100644 --- a/gfx/context/xdk_ctx.c +++ b/gfx/context/xdk_ctx.c @@ -32,7 +32,7 @@ #include "../../screenshot.h" -#include "../fonts/d3d_fonts.h" +#include "../fonts/d3d_font.h" #if defined(_XBOX1) #define XBOX_PRESENTATIONINTERVAL D3DRS_PRESENTATIONINTERVAL @@ -270,14 +270,6 @@ static void gfx_ctx_xdk_menu_set_default_pos(rmenu_default_positions_t *position #endif } -static void gfx_ctx_xdk_menu_render_msg(float xpos, float ypos, float scale, unsigned color, const char *msg, ...) -{ -#ifdef _XBOX1 - xdk_d3d_video_t *device_ptr = (xdk_d3d_video_t*)driver.video_data; - xfonts_render_msg_place(device_ptr, xpos, ypos, scale, msg); -#endif -} - static void gfx_ctx_xdk_menu_screenshot_enable(bool enable) { } @@ -550,7 +542,6 @@ const gfx_ctx_driver_t gfx_ctx_xdk = { gfx_ctx_xdk_menu_draw_bg, gfx_ctx_xdk_menu_draw_panel, gfx_ctx_xdk_menu_set_default_pos, - gfx_ctx_xdk_menu_render_msg, gfx_ctx_xdk_menu_screenshot_enable, gfx_ctx_xdk_menu_screenshot_dump, gfx_ctx_xdk_menu_drive_mapping_previous, diff --git a/gfx/fonts/bitmapfont.c b/gfx/fonts/bitmapfont.c index 7247e0dd77..79f88645aa 100644 --- a/gfx/fonts/bitmapfont.c +++ b/gfx/fonts/bitmapfont.c @@ -17,7 +17,7 @@ #include "bitmap.h" #include #include -#include +#include "../../boolean.h" struct font_renderer { @@ -55,7 +55,7 @@ static void *font_renderer_init(const char *font_path, unsigned font_size) if (!handle->scale_factor) handle->scale_factor = 1; - handle->bitmap_alloc = malloc(FONT_WIDTH * FONT_HEIGHT * handle->scale_factor * handle->scale_factor * 256); + handle->bitmap_alloc = (uint8_t*)malloc(FONT_WIDTH * FONT_HEIGHT * handle->scale_factor * handle->scale_factor * 256); if (!handle->bitmap_alloc) { diff --git a/gfx/fonts/xdk1_xfonts.c b/gfx/fonts/xdk1_xfonts.c index 05bdd93c9c..6175a94094 100644 --- a/gfx/fonts/xdk1_xfonts.c +++ b/gfx/fonts/xdk1_xfonts.c @@ -20,10 +20,17 @@ static bool xfonts_init_font(void *data, const char *font_path, unsigned font_size) { - (void)data; (void)font_path; (void)font_size; + xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data; + + XFONT_OpenDefaultFont(&d3d->debug_font); + d3d->debug_font->SetBkMode(XFONT_TRANSPARENT); + d3d->debug_font->SetBkColor(D3DCOLOR_ARGB(100,0,0,0)); + d3d->debug_font->SetTextHeight(14); + d3d->debug_font->SetTextAntialiasLevel(d3d->debug_font->GetTextAntialiasLevel()); + return true; } @@ -32,12 +39,7 @@ static void xfonts_deinit_font(void *data) (void)data; } -static void xfonts_render_msg(void *data, const char *msg) -{ - xfonts_render_msg_place(data, g_settings.video.msg_pos_x, g_settings.video.msg_pos_y, 0, msg); -} - -static void xfonts_render_msg_place(void *data, float x, float y, float scale, const char *msg) +static void xfonts_render_msg_place(void *data, float x, float y, float scale, uint32_t color, const char *msg) { xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data; @@ -50,6 +52,11 @@ static void xfonts_render_msg_place(void *data, float x, float y, float scale, c d3d->pFrontBuffer->Release(); } +static void xfonts_render_msg(void *data, const char *msg) +{ + xfonts_render_msg_place(data, g_settings.video.msg_pos_x, g_settings.video.msg_pos_y, 0, 0, msg); +} + const d3d_font_renderer_t d3d_xdk1_font = { xfonts_init_font, xfonts_deinit_font, diff --git a/gfx/fonts/xdk360_fonts.cpp b/gfx/fonts/xdk360_fonts.cpp index 2403dc1af7..b597bdbbe7 100644 --- a/gfx/fonts/xdk360_fonts.cpp +++ b/gfx/fonts/xdk360_fonts.cpp @@ -428,9 +428,9 @@ static void xdk_video_font_draw_text(xdk360_video_font_t *font, pd3dDevice->EndVertices(); } -static void xdk_render_msg_place(void *driver, float x, float y, const char *str_msg) +static void xdk_render_msg_place(void *data, float x, float y, float scale, uint32_t color, const char *str_msg) { - xdk_d3d_video_t *vid = (xdk_d3d_video_t*)driver; + xdk_d3d_video_t *vid = (xdk_d3d_video_t*)data; wchar_t msg[PATH_MAX]; convert_char_to_wchar(msg, str_msg, sizeof(msg)); diff --git a/xdk/xdk_d3d.cpp b/xdk/xdk_d3d.cpp index 64a9238ad7..3030f09830 100644 --- a/xdk/xdk_d3d.cpp +++ b/xdk/xdk_d3d.cpp @@ -34,8 +34,6 @@ #include "config.h" #endif -#include "../gfx/fonts/d3d_fonts.h" - #include "../xdk/xdk_resources.h" #if defined(_XBOX1) @@ -789,13 +787,11 @@ static bool xdk_d3d_frame(void *data, const void *frame, #endif #if defined(_XBOX1) -#define fonts_render_msg_place_func(device, x, y, scale, msg) xfonts_render_msg_place(device, x, y, scale, msg) float mem_width = font_x + 30; float mem_height = font_y + 50; float msg_width = 60; float msg_height = 365; #elif defined(_XBOX360) -#define fonts_render_msg_place_func(device, x, y, scale, msg) xdk_render_msg_place(device, x, y, msg) float mem_width = g_extern.console.rmenu.state.rmenu_hd.enable ? 160 : 100; float mem_height = 70; float msg_width = mem_width; @@ -811,10 +807,10 @@ static bool xdk_d3d_frame(void *data, const void *frame, char buf[128]; snprintf(buf, sizeof(buf), "%.2f MB free / %.2f MB total", stat.dwAvailPhys/(1024.0f*1024.0f), stat.dwTotalPhys/(1024.0f*1024.0f)); - fonts_render_msg_place_func(d3d, mem_width, mem_height, 0, buf); + d3d->font_ctx->render_msg_place(d3d, mem_width, mem_height, 0, 0, buf); gfx_fps_title(fps_txt, sizeof(fps_txt)); - fonts_render_msg_place_func(d3d, mem_width, mem_height + 30, 0, fps_txt); + d3d->font_ctx->render_msg_place(d3d, mem_width, mem_height + 30, 0, 0, fps_txt); } if (msg @@ -822,7 +818,7 @@ static bool xdk_d3d_frame(void *data, const void *frame, && !menu_enabled #endif ) - fonts_render_msg_place_func(d3d, msg_width, msg_height, 0, msg); //TODO: dehardcode x/y here for HD (720p) mode + d3d->font_ctx->render_msg_place(d3d, msg_width, msg_height, 0, 0, msg); //TODO: dehardcode x/y here for HD (720p) mode if(!d3d->block_swap) gfx_ctx_xdk_swap_buffers(); @@ -870,21 +866,12 @@ static void xdk_d3d_start(void) xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; #if defined(_XBOX1) - /* load debug fonts */ - XFONT_OpenDefaultFont(&d3d->debug_font); - d3d->debug_font->SetBkMode(XFONT_TRANSPARENT); - d3d->debug_font->SetBkColor(D3DCOLOR_ARGB(100,0,0,0)); - d3d->debug_font->SetTextHeight(14); - d3d->debug_font->SetTextAntialiasLevel(d3d->debug_font->GetTextAntialiasLevel()); - font_x = 0; font_y = 0; #elif defined(_XBOX360) - HRESULT hr = d3d9_init_font("game:\\media\\Arial_12.xpr"); - - if(hr < 0) - RARCH_ERR("Couldn't initialize HLSL shader fonts.\n"); + snprintf(g_settings.video.font_path, sizeof(g_settings.video.font_path), "game:\\media\\Arial_12.xpr"); #endif + d3d->font_ctx = d3d_font_init_first(d3d, g_settings.video.font_path, g_settings.video.font_size); } static void xdk_d3d_restart(void) diff --git a/xdk/xdk_d3d.h b/xdk/xdk_d3d.h index cbc960f898..91c216eb45 100644 --- a/xdk/xdk_d3d.h +++ b/xdk/xdk_d3d.h @@ -21,6 +21,7 @@ #ifdef _XBOX1 #include #endif +#include "../gfx/fonts/d3d_font.h" #include "../gfx/gfx_context.h" #include "../xdk/xdk_defines.h" @@ -73,6 +74,7 @@ typedef struct xdk_d3d_video LPDIRECT3DTEXTURE lpTexture_ot; IDirect3DVertexDeclaration9* v_decl; #endif + const d3d_font_renderer_t *font_ctx; #if defined(_XBOX1) XFONT *debug_font; D3DSurface *pBackBuffer, *pFrontBuffer;