(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;
} d3dfonts_t;
static d3dfonts_t *d3dfonts;
static bool d3dfonts_w32_init_font(void *video_data,
static void *d3dfonts_w32_init_font(void *video_data,
const char *font_path, unsigned font_size)
{
uint32_t r, g, b;
d3dfonts_t *d3dfonts = NULL;
settings_t *settings = config_get_ptr();
D3DXFONT_DESC desc = {
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));
if (!d3dfonts)
return false;
return NULL;
(void)font_path;
@ -55,12 +54,21 @@ static bool d3dfonts_w32_init_font(void *video_data,
d3dfonts->d3d = (d3d_video_t*)video_data;
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)
{
(void)data;
d3dfonts_t *d3dfonts = (d3dfonts_t*)data;
if (!d3dfonts)
return;
if (d3dfonts->font)
d3dfonts->font->Release();
@ -74,8 +82,9 @@ static void d3dfonts_w32_render_msg(void *data, const char *msg,
const void *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;
if (!msg)
return;

View File

@ -25,33 +25,31 @@ typedef struct
D3DSurface *pFrontBuffer;
} xfonts_t;
static xfonts_t *xfonts;
static bool xfonts_init_font(void *video_data,
static void *xfonts_init_font(void *video_data,
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_size;
xfont = (xfonts_t*)calloc(1, sizeof(*xfont));
xfonts->d3d = video_data;
if (!xfont)
return false;
XFONT_OpenDefaultFont(&xfonts->debug_font);
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;
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;
return xfonts;
}
static void xfonts_free_font(void *data)
{
(void)data;
xfonts_t *xfonts = (xfonts_t*)data;
if (xfont)
free(xfont);
@ -65,8 +63,7 @@ static void xfonts_render_msg(void *data, const char *msg,
float x, y;
settings_t *settings = config_get_ptr();
const struct font_params *params = (const struct font_params*)userdata;
(void)data;
xfonts_t *xfonts = (xfonts_t*)data;
if (params)
{
@ -79,11 +76,11 @@ static void xfonts_render_msg(void *data, const char *msg,
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));
xfont->debug_font->TextOut(xfont->pFrontBuffer, str, (unsigned)-1, x, y);
xfont->pFrontBuffer->Release();
xfonts->debug_font->TextOut(xfonts->pFrontBuffer, str, (unsigned)-1, x, y);
xfonts->pFrontBuffer->Release();
}
d3d_font_renderer_t d3d_xdk1_font = {

View File

@ -53,7 +53,6 @@ typedef struct
const GLYPH_ATTR* m_Glyphs; /* Array of glyphs. */
} xdk360_video_font_t;
static xdk360_video_font_t *m_Font;
static PackedResource m_xprResource;
#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;
}
static bool xdk360_init_font(void *video_data,
static void *xdk360_init_font(void *video_data,
const char *font_path, unsigned font_size)
{
unsigned long dwFileVersion;
const void *pFontData = NULL;
D3DTexture *pFontTexture = 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 (!m_Font)
return false;
m_Font->d3d = (d3d_video_t*)video_data;
if (!font)
return NULL;
(void)font_size;
font = (xdk360_video_font_t*)m_Font;
font->d3d = (d3d_video_t*)video_data;
font->m_pFontTexture = NULL;
font->m_dwNumGlyphs = 0L;
@ -245,15 +240,20 @@ static bool xdk360_init_font(void *video_data,
}
RARCH_LOG("Successfully initialized D3D9 HLSL fonts.\n");
return true;
return font;
error:
RARCH_ERR("Could not initialize D3D9 HLSL fonts.\n");
return false;
if (font)
free(font);
return NULL;
}
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 */
font->m_pFontTexture = NULL;
@ -276,9 +276,9 @@ static void xdk360_free_font(void *data)
if (m_xprResource.Initialized())
m_xprResource.Destroy();
if (m_Font)
free(m_Font);
m_Font = NULL;
if (font)
free(font);
font = NULL;
}
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;
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;
if (params)

View File

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

View File

@ -27,7 +27,7 @@ extern "C" {
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 (*render_msg)(void *data, const char *msg,
const void *params);