mirror of
https://github.com/libretro/RetroArch
synced 2025-04-01 13:20:43 +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;
|
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;
|
||||||
|
@ -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 = {
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user