mirror of
https://github.com/libretro/RetroArch
synced 2025-03-24 04:44:02 +00:00
(D3D) Start changing init functions of d3d font drivers
This commit is contained in:
parent
8f3e83ad10
commit
fbb84ba4b6
@ -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;
|
||||
|
@ -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 = {
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user