(D3D) Start changing init functions of d3d font drivers

This commit is contained in:
twinaphex 2015-03-30 00:41:42 +02:00
parent 8f3e83ad10
commit fbb84ba4b6
5 changed files with 57 additions and 48 deletions

View File

@ -25,12 +25,11 @@ typedef struct
uint32_t color; uint32_t color;
} d3dfonts_t; } d3dfonts_t;
static d3dfonts_t *d3dfonts; static void *d3dfonts_w32_init_font(void *video_data,
static bool d3dfonts_w32_init_font(void *video_data,
const char *font_path, unsigned font_size) const char *font_path, unsigned font_size)
{ {
uint32_t r, g, b; uint32_t r, g, b;
d3dfonts_t *d3dfonts = NULL;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
D3DXFONT_DESC desc = { D3DXFONT_DESC desc = {
static_cast<int>(font_size), 0, 400, 0, static_cast<int>(font_size), 0, 400, 0,
@ -44,7 +43,7 @@ static bool d3dfonts_w32_init_font(void *video_data,
d3dfonts = (d3dfonts_t*)calloc(1, sizeof(*d3dfonts)); d3dfonts = (d3dfonts_t*)calloc(1, sizeof(*d3dfonts));
if (!d3dfonts) if (!d3dfonts)
return false; return NULL;
(void)font_path; (void)font_path;
@ -55,12 +54,21 @@ static bool d3dfonts_w32_init_font(void *video_data,
d3dfonts->d3d = (d3d_video_t*)video_data; d3dfonts->d3d = (d3d_video_t*)video_data;
d3dfonts->color = D3DCOLOR_XRGB(r, g, b); d3dfonts->color = D3DCOLOR_XRGB(r, g, b);
return SUCCEEDED(D3DXCreateFontIndirect(d3dfonts->d3d->dev, &desc, &d3dfonts->font)); if (!FAILED(D3DXCreateFontIndirect(d3dfonts->d3d->dev, &desc, &d3dfonts->font)))
{
free(d3dfonts);
return NULL;
}
return d3dfonts;
} }
static void d3dfonts_w32_free_font(void *data) static void d3dfonts_w32_free_font(void *data)
{ {
(void)data; d3dfonts_t *d3dfonts = (d3dfonts_t*)data;
if (!d3dfonts)
return;
if (d3dfonts->font) if (d3dfonts->font)
d3dfonts->font->Release(); d3dfonts->font->Release();
@ -74,8 +82,9 @@ static void d3dfonts_w32_render_msg(void *data, const char *msg,
const void *userdata) const void *userdata)
{ {
const struct font_params *params = (const struct font_params*)userdata; const struct font_params *params = (const struct font_params*)userdata;
d3dfonts_t *d3dfonts = (d3dfonts_t*)data;
if (!d3dfonts->d3d) if (!d3dfonts || !d3dfonts->d3d)
return; return;
if (!msg) if (!msg)
return; return;

View File

@ -25,33 +25,31 @@ typedef struct
D3DSurface *pFrontBuffer; D3DSurface *pFrontBuffer;
} xfonts_t; } xfonts_t;
static xfonts_t *xfonts; static void *xfonts_init_font(void *video_data,
static bool xfonts_init_font(void *video_data,
const char *font_path, unsigned font_size) const char *font_path, unsigned font_size)
{ {
xfonts_t *xfonts = (xfonts_t*)calloc(1, sizeof(*xfont));
if (!xfonts)
return NULL;
(void)font_path; (void)font_path;
(void)font_size; (void)font_size;
xfont = (xfonts_t*)calloc(1, sizeof(*xfont)); xfonts->d3d = video_data;
if (!xfont) XFONT_OpenDefaultFont(&xfonts->debug_font);
return false; xfonts->debug_font->SetBkMode(XFONT_TRANSPARENT);
xfonts->debug_font->SetBkColor(D3DCOLOR_ARGB(100,0,0,0));
xfonts->debug_font->SetTextHeight(14);
xfonts->debug_font->SetTextAntialiasLevel(xfonts->debug_font->GetTextAntialiasLevel());
xfont->d3d = video_data; return xfonts;
XFONT_OpenDefaultFont(&xfont->debug_font);
xfont->debug_font->SetBkMode(XFONT_TRANSPARENT);
xfont->debug_font->SetBkColor(D3DCOLOR_ARGB(100,0,0,0));
xfont->debug_font->SetTextHeight(14);
xfont->debug_font->SetTextAntialiasLevel(xfont->debug_font->GetTextAntialiasLevel());
return true;
} }
static void xfonts_free_font(void *data) static void xfonts_free_font(void *data)
{ {
(void)data; xfonts_t *xfonts = (xfonts_t*)data;
if (xfont) if (xfont)
free(xfont); free(xfont);
@ -65,8 +63,7 @@ static void xfonts_render_msg(void *data, const char *msg,
float x, y; float x, y;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
const struct font_params *params = (const struct font_params*)userdata; const struct font_params *params = (const struct font_params*)userdata;
xfonts_t *xfonts = (xfonts_t*)data;
(void)data;
if (params) if (params)
{ {
@ -79,11 +76,11 @@ static void xfonts_render_msg(void *data, const char *msg,
y = settings->video.msg_pos_y; y = settings->video.msg_pos_y;
} }
xfont->d3d->dev->GetBackBuffer(-1, D3DBACKBUFFER_TYPE_MONO, &xfont->pFrontBuffer); xfonts->d3d->dev->GetBackBuffer(-1, D3DBACKBUFFER_TYPE_MONO, &xfonts->pFrontBuffer);
mbstowcs(str, msg, sizeof(str) / sizeof(wchar_t)); mbstowcs(str, msg, sizeof(str) / sizeof(wchar_t));
xfont->debug_font->TextOut(xfont->pFrontBuffer, str, (unsigned)-1, x, y); xfonts->debug_font->TextOut(xfonts->pFrontBuffer, str, (unsigned)-1, x, y);
xfont->pFrontBuffer->Release(); xfonts->pFrontBuffer->Release();
} }
d3d_font_renderer_t d3d_xdk1_font = { d3d_font_renderer_t d3d_xdk1_font = {

View File

@ -53,7 +53,6 @@ typedef struct
const GLYPH_ATTR* m_Glyphs; /* Array of glyphs. */ const GLYPH_ATTR* m_Glyphs; /* Array of glyphs. */
} xdk360_video_font_t; } xdk360_video_font_t;
static xdk360_video_font_t *m_Font;
static PackedResource m_xprResource; static PackedResource m_xprResource;
#define CALCFONTFILEHEADERSIZE(x) ( sizeof(unsigned long) + (sizeof(float)* 4) + sizeof(unsigned short) + (sizeof(wchar_t)*(x)) ) #define CALCFONTFILEHEADERSIZE(x) ( sizeof(unsigned long) + (sizeof(float)* 4) + sizeof(unsigned short) + (sizeof(wchar_t)*(x)) )
@ -176,25 +175,21 @@ static HRESULT xdk360_video_font_create_shaders(xdk360_video_font_t * font)
return hr; return hr;
} }
static bool xdk360_init_font(void *video_data, static void *xdk360_init_font(void *video_data,
const char *font_path, unsigned font_size) const char *font_path, unsigned font_size)
{ {
unsigned long dwFileVersion; unsigned long dwFileVersion;
const void *pFontData = NULL; const void *pFontData = NULL;
D3DTexture *pFontTexture = NULL; D3DTexture *pFontTexture = NULL;
const unsigned char * pData = NULL; const unsigned char * pData = NULL;
xdk360_video_font_t *font = NULL; xdk360_video_font_t *font = (xdk360_video_font_t*)calloc(1, sizeof(*font));
m_Font = (xdk360_video_font_t*)calloc(1, sizeof(*m_Font)); if (!font)
return NULL;
if (!m_Font)
return false;
m_Font->d3d = (d3d_video_t*)video_data;
(void)font_size; (void)font_size;
font = (xdk360_video_font_t*)m_Font; font->d3d = (d3d_video_t*)video_data;
font->m_pFontTexture = NULL; font->m_pFontTexture = NULL;
font->m_dwNumGlyphs = 0L; font->m_dwNumGlyphs = 0L;
@ -245,15 +240,20 @@ static bool xdk360_init_font(void *video_data,
} }
RARCH_LOG("Successfully initialized D3D9 HLSL fonts.\n"); RARCH_LOG("Successfully initialized D3D9 HLSL fonts.\n");
return true; return font;
error: error:
RARCH_ERR("Could not initialize D3D9 HLSL fonts.\n"); RARCH_ERR("Could not initialize D3D9 HLSL fonts.\n");
return false; if (font)
free(font);
return NULL;
} }
static void xdk360_free_font(void *data) static void xdk360_free_font(void *data)
{ {
xdk360_video_font_t *font = (xdk360_video_font_t*)m_Font; xdk360_video_font_t *font = (xdk360_video_font_t*)data;
if (!font)
return;
/* Destroy the font */ /* Destroy the font */
font->m_pFontTexture = NULL; font->m_pFontTexture = NULL;
@ -276,9 +276,9 @@ static void xdk360_free_font(void *data)
if (m_xprResource.Initialized()) if (m_xprResource.Initialized())
m_xprResource.Destroy(); m_xprResource.Destroy();
if (m_Font) if (font)
free(m_Font); free(font);
m_Font = NULL; font = NULL;
} }
static void xdk360_render_msg_post(xdk360_video_font_t * font) static void xdk360_render_msg_post(xdk360_video_font_t * font)
@ -463,7 +463,7 @@ static void xdk360_render_msg(void *data, const char *str_msg,
{ {
float x, y; float x, y;
wchar_t msg[PATH_MAX_LENGTH]; wchar_t msg[PATH_MAX_LENGTH];
xdk360_video_font_t *font = (xdk360_video_font_t*)m_Font; xdk360_video_font_t *font = (xdk360_video_font_t*)data;
const struct font_params *params = (const struct font_params*)userdata; const struct font_params *params = (const struct font_params*)userdata;
if (params) if (params)

View File

@ -35,10 +35,13 @@ bool d3d_font_init_first(
for (i = 0; i < ARRAY_SIZE(d3d_font_backends); i++) for (i = 0; i < ARRAY_SIZE(d3d_font_backends); i++)
{ {
if (!d3d_font_backends[i]->init(video_data, font_path, font_size)) void *data = d3d_font_backends[i]->init(video_data, font_path, font_size);
return false;
if (!data)
continue;
*font_driver = d3d_font_backends[i]; *font_driver = d3d_font_backends[i];
*font_handle = data;
return true; return true;
} }

View File

@ -27,7 +27,7 @@ extern "C" {
typedef struct d3d_font_renderer typedef struct d3d_font_renderer
{ {
bool (*init)(void *data, const char *font_path, unsigned font_size); void *(*init)(void *data, const char *font_path, unsigned font_size);
void (*free)(void *data); void (*free)(void *data);
void (*render_msg)(void *data, const char *msg, void (*render_msg)(void *data, const char *msg,
const void *params); const void *params);