diff --git a/gfx/d3d9/d3d.cpp b/gfx/d3d9/d3d.cpp index 5c4be9d029..7c7138a822 100644 --- a/gfx/d3d9/d3d.cpp +++ b/gfx/d3d9/d3d.cpp @@ -91,7 +91,9 @@ RECT d3d_monitor_rect(void *data) static void d3d_deinitialize(void *data) { D3DVideo *d3d = reinterpret_cast(data); - d3d_deinit_font(d3d); + + if (d3d->font_ctx && d3d->font_ctx->deinit) + d3d->font_ctx->deinit(d3d); d3d_deinit_chain(d3d); #ifdef HAVE_CG d3d_deinit_shader(d3d); @@ -211,7 +213,8 @@ static bool d3d_initialize(void *data, const video_info_t *info) return false; } - if (!d3d_init_font(d3d)) + d3d->font_ctx = d3d_font_init_first(d3d, g_settings.video.font_path, g_settings.video.font_size); + if (!d3d->font_ctx) { RARCH_ERR("Failed to initialize font.\n"); return false; @@ -473,7 +476,8 @@ static bool d3d_frame(void *data, const void *frame, return false; } - d3d_render_msg(d3d, msg, NULL); + if (d3d->font_ctx && d3d->font_ctx->render_msg) + d3d->font_ctx->render_msg(d3d, msg, NULL); #ifdef HAVE_MENU if (d3d->rgui.enabled) @@ -832,15 +836,6 @@ static void d3d_apply_state_changes(void *data) d3d->should_resize = true; } -static void d3d_render_msg(void *data, const char *msg, void *userdata) -{ - D3DVideo *d3d = reinterpret_cast(data); - d3d_font_msg(d3d, msg, userdata); - - if (userdata) - d3d_set_font_rect(d3d, NULL); -} - static void d3d_set_osd_msg(void *data, const char *msg, void *userdata) { font_params_t *params = (font_params_t*)userdata; @@ -849,7 +844,8 @@ static void d3d_set_osd_msg(void *data, const char *msg, void *userdata) if (params) d3d_set_font_rect(d3d, params); - d3d_render_msg(d3d, msg, params); + if (d3d->font_ctx && d3d->font_ctx->render_msg) + d3d->font_ctx->render_msg(d3d, msg, params); } static void d3d_show_mouse(void *data, bool state) diff --git a/gfx/d3d9/d3d9.hpp b/gfx/d3d9/d3d9.hpp index b1f148c016..b5ffc677d2 100644 --- a/gfx/d3d9/d3d9.hpp +++ b/gfx/d3d9/d3d9.hpp @@ -39,6 +39,7 @@ #include "../../driver.h" #include "../shader_parse.h" +#include "../fonts/d3d_font.h" #include "../gfx_context.h" #include "../gfx_common.h" @@ -81,15 +82,13 @@ bool d3d_init_singlepass(void *data); bool d3d_init_multipass(void *data); bool d3d_init_chain(void *data, const video_info_t *video_info); void d3d_deinit_chain(void *data); -bool d3d_init_font(void *data); -void d3d_deinit_font(void *data); -void d3d_font_msg(void *data, const char *msg, void *userdata); void d3d_show_cursor(void *data, bool state); void d3d_make_d3dpp(void *data, const video_info_t *info, D3DPRESENT_PARAMETERS *d3dpp); bool d3d_alive_func(void *data); struct D3DVideo { + const d3d_font_renderer_t *font_ctx; const gfx_ctx_driver_t *ctx_driver; bool should_resize; diff --git a/gfx/d3d9/d3d9_pc.cpp b/gfx/d3d9/d3d9_pc.cpp index dcd63d0aec..0aebadf86c 100644 --- a/gfx/d3d9/d3d9_pc.cpp +++ b/gfx/d3d9/d3d9_pc.cpp @@ -419,34 +419,6 @@ void d3d_deinit_chain(void *data) d3d->chain = NULL; } -bool d3d_init_font(void *data) -{ - D3DVideo *d3d = reinterpret_cast(data); - D3DXFONT_DESC desc = { - static_cast(g_settings.video.font_size), 0, 400, 0, - false, DEFAULT_CHARSET, - OUT_TT_PRECIS, - CLIP_DEFAULT_PRECIS, - DEFAULT_PITCH, - "Verdana" // Hardcode ftl :( - }; - - uint32_t r = static_cast(g_settings.video.msg_color_r * 255) & 0xff; - uint32_t g = static_cast(g_settings.video.msg_color_g * 255) & 0xff; - uint32_t b = static_cast(g_settings.video.msg_color_b * 255) & 0xff; - d3d->font_color = D3DCOLOR_XRGB(r, g, b); - - return SUCCEEDED(D3DXCreateFontIndirect(d3d->dev, &desc, &d3d->font)); -} - -void d3d_deinit_font(void *data) -{ - D3DVideo *d3d = reinterpret_cast(data); - if (d3d->font) - d3d->font->Release(); - d3d->font = NULL; -} - static void gfx_ctx_d3d_show_mouse(bool state) { #ifdef HAVE_WINDOW diff --git a/gfx/fonts/d3d_w32_font.c b/gfx/fonts/d3d_w32_font.c index d6c187f4a0..7021c0cade 100644 --- a/gfx/fonts/d3d_w32_font.c +++ b/gfx/fonts/d3d_w32_font.c @@ -14,6 +14,7 @@ * If not, see . */ +#include "../d3d9/d3d9.hpp" #include "d3d_font.h" #include "../gfx_common.h" #include "../../general.h" @@ -48,7 +49,7 @@ static void d3dfonts_w32_deinit_font(void *data) d3d->font = NULL; } -static void d3dfonts_w32_render_msg(void *data, const char *msg, void *parms) +static void d3dfonts_w32_render_msg(void *data, const char *msg, void *userdata) { D3DVideo *d3d = reinterpret_cast(data); font_params_t *params = (font_params_t*)userdata; @@ -73,7 +74,7 @@ static void d3dfonts_w32_render_msg(void *data, const char *msg, void *parms) } } -const d3d_font_renderer_t d3d_xdk1_font = { +const d3d_font_renderer_t d3d_win32_font = { d3dfonts_w32_init_font, d3dfonts_w32_deinit_font, d3dfonts_w32_render_msg, diff --git a/msvc/msvc-2010/RetroArch-msvc2010.vcxproj b/msvc/msvc-2010/RetroArch-msvc2010.vcxproj index 230a2d2d34..88c9cbf711 100644 --- a/msvc/msvc-2010/RetroArch-msvc2010.vcxproj +++ b/msvc/msvc-2010/RetroArch-msvc2010.vcxproj @@ -226,6 +226,8 @@ + + diff --git a/msvc/msvc-2010/RetroArch-msvc2010.vcxproj.filters b/msvc/msvc-2010/RetroArch-msvc2010.vcxproj.filters index 17c8ddab46..b857c52c0a 100644 --- a/msvc/msvc-2010/RetroArch-msvc2010.vcxproj.filters +++ b/msvc/msvc-2010/RetroArch-msvc2010.vcxproj.filters @@ -135,9 +135,6 @@ input - - gfx\fonts - gfx\scaler @@ -150,9 +147,6 @@ gfx\scaler - - gfx\fonts - gfx\d3d9 @@ -219,6 +213,18 @@ deps\zlib + + gfx\fonts + + + gfx\fonts + + + gfx\fonts + + + gfx\fonts +