diff --git a/gfx/drivers_font/caca_font.c b/gfx/drivers_font/caca_font.c index 034608a4f5..f7ab54f028 100644 --- a/gfx/drivers_font/caca_font.c +++ b/gfx/drivers_font/caca_font.c @@ -59,6 +59,7 @@ static void *caca_init_font(void *data, static void caca_render_free_font(void *data) { + } static int caca_get_message_width(void *data, const char *msg, diff --git a/gfx/drivers_font/ctr_font.c b/gfx/drivers_font/ctr_font.c index ce4c4e48f4..2409aec4e1 100644 --- a/gfx/drivers_font/ctr_font.c +++ b/gfx/drivers_font/ctr_font.c @@ -109,6 +109,7 @@ static void ctr_font_free_font(void* data) #else linearFree(font->texture.data); #endif + free(font); } static int ctr_font_get_message_width(void* data, const char* msg, diff --git a/gfx/drivers_font/d3d_w32_font.cpp b/gfx/drivers_font/d3d_w32_font.cpp index d8ba99055d..1fd5065782 100644 --- a/gfx/drivers_font/d3d_w32_font.cpp +++ b/gfx/drivers_font/d3d_w32_font.cpp @@ -88,6 +88,9 @@ static void d3dfonts_w32_free_font(void *data) if (d3dfonts->font) d3dfonts->font->Release(); d3dfonts->font = NULL; + + free(d3dfonts); + d3dfonts = NULL; } static void d3dfonts_w32_render_msg(void *data, const char *msg, diff --git a/gfx/drivers_font/gl_raster_font.c b/gfx/drivers_font/gl_raster_font.c index 707585ad0c..fb7d653a96 100644 --- a/gfx/drivers_font/gl_raster_font.c +++ b/gfx/drivers_font/gl_raster_font.c @@ -57,6 +57,8 @@ typedef struct video_font_raster_block_t *block; } gl_raster_t; +static void gl_raster_font_free_font(void *data); + static bool gl_raster_font_upload_atlas(gl_raster_t *font) { unsigned i, j; @@ -142,21 +144,6 @@ static bool gl_raster_font_upload_atlas(gl_raster_t *font) return true; } -static void gl_raster_font_free_font(void *data) -{ - gl_raster_t *font = (gl_raster_t*)data; - if (!font) - return; - - if (font->font_driver && font->font_data) - font->font_driver->free(font->font_data); - - if (video_driver_is_threaded()) - video_context_driver_make_current(true); - - glDeleteTextures(1, &font->tex); -} - static void *gl_raster_font_init_font(void *data, const char *font_path, float font_size) { @@ -169,7 +156,11 @@ static void *gl_raster_font_init_font(void *data, if (!font_renderer_create_default((const void**)&font->font_driver, &font->font_data, font_path, font_size)) - goto error; + { + RARCH_WARN("Couldn't initialize font renderer.\n"); + free(font); + return NULL; + } if (video_driver_is_threaded()) video_context_driver_make_current(false); @@ -195,13 +186,28 @@ static void *gl_raster_font_init_font(void *data, return font; error: - RARCH_WARN("Couldn't initialize font renderer.\n"); gl_raster_font_free_font(font); - free(font); + font = NULL; return NULL; } +static void gl_raster_font_free_font(void *data) +{ + gl_raster_t *font = (gl_raster_t*)data; + if (!font) + return; + + if (font->font_driver && font->font_data) + font->font_driver->free(font->font_data); + + if (video_driver_is_threaded()) + video_context_driver_make_current(true); + + glDeleteTextures(1, &font->tex); + + free(font); +} static int gl_get_message_width(void *data, const char *msg, unsigned msg_len, float scale) diff --git a/gfx/drivers_font/vita2d_font.c b/gfx/drivers_font/vita2d_font.c index 2cffc9dbf0..0069501abc 100644 --- a/gfx/drivers_font/vita2d_font.c +++ b/gfx/drivers_font/vita2d_font.c @@ -98,6 +98,8 @@ static void vita2d_font_free_font(void *data) vita2d_wait_rendering_done(); #endif vita2d_free_texture(font->texture); + + free(font); } static int vita2d_font_get_message_width(void *data, const char *msg, diff --git a/gfx/drivers_font/vulkan_raster_font.c b/gfx/drivers_font/vulkan_raster_font.c index 8f0b66b147..84f071a0fc 100644 --- a/gfx/drivers_font/vulkan_raster_font.c +++ b/gfx/drivers_font/vulkan_raster_font.c @@ -85,6 +85,8 @@ static void vulkan_raster_font_free_font(void *data) vkQueueWaitIdle(font->vk->context->queue); vulkan_destroy_texture( font->vk->context->device, &font->texture); + + free(font); } static int vulkan_get_message_width(void *data, const char *msg, diff --git a/gfx/drivers_font/xdk1_xfonts.c b/gfx/drivers_font/xdk1_xfonts.c index 644738877c..bceffdf95e 100644 --- a/gfx/drivers_font/xdk1_xfonts.c +++ b/gfx/drivers_font/xdk1_xfonts.c @@ -55,6 +55,12 @@ static void *xfonts_init_font(void *video_data, static void xfonts_free_font(void *data) { + xfonts_t *font = (xfonts_t*)data; + + if (font) + free(font); + + font = NULL; } static void xfonts_render_msg(void *data, const char *msg, diff --git a/gfx/drivers_font/xdk360_fonts.cpp b/gfx/drivers_font/xdk360_fonts.cpp index 5f8d128cd5..e0e00ebc57 100644 --- a/gfx/drivers_font/xdk360_fonts.cpp +++ b/gfx/drivers_font/xdk360_fonts.cpp @@ -58,18 +58,18 @@ enum class PackedResource { protected: - BYTE* m_pSysMemData; /* Allocated memory for resource headers etc. */ + BYTE* m_pSysMemData; // Alloc'ed memory for resource headers etc. DWORD m_dwSysMemDataSize; - BYTE* m_pVidMemData; /* Allocated memory for resource data, etc. */ + BYTE* m_pVidMemData; // Alloc'ed memory for resource data, etc. DWORD m_dwVidMemDataSize; - XBRESOURCE* m_pResourceTags; /* Tags to associate names with the resources */ - DWORD m_dwNumResourceTags; /* Number of resource tags */ - BOOL m_bInitialized; /* Resource is fully initialized */ + XBRESOURCE* m_pResourceTags; // Tags to associate names with the resources + DWORD m_dwNumResourceTags; // Number of resource tags + BOOL m_bInitialized; // Resource is fully initialized public: - /* Loads the resources out of the specified bundle */ + // Loads the resources out of the specified bundle #if defined(_XBOX1) HRESULT Create( const char *strFilename, DWORD dwNumResourceTags = 0L, XBRESOURCE* pResourceTags = NULL ); @@ -82,21 +82,20 @@ class PackedResource BOOL Initialized() const; #ifdef _XBOX360 - /* Retrieves the resource tags */ + // Retrieves the resource tags void GetResourceTags( DWORD* pdwNumResourceTags, XBRESOURCE** ppResourceTags ); #endif - /* Helper function to make sure a resource is registered */ + // Helper function to make sure a resource is registered LPDIRECT3DRESOURCE RegisterResource( LPDIRECT3DRESOURCE pResource ) const { #ifdef _XBOX1 - /* Register the resource, if it has not yet been registered. We mark - * a resource as registered by upping it's reference count. */ + // Register the resource, if it has not yet been registered. We mark + // a resource as registered by upping it's reference count. if( pResource && ( pResource->Common & D3DCOMMON_REFCOUNT_MASK ) == 1 ) { - - /* Special case CPU-copy push buffers (which live in system memory) */ - if( ( pResource->Common & D3DCOMMON_TYPE_PUSHBUFFER ) && + // Special case CPU-copy push buffers (which live in system memory) + if( ( pResource->Common & D3DCOMMON_TYPE_PUSHBUFFER ) && ( pResource->Common & D3DPUSHBUFFER_RUN_USING_CPU_COPY ) ) pResource->Data += (DWORD)m_pSysMemData; else @@ -108,46 +107,32 @@ class PackedResource return pResource; } - /* Functions to retrieve resources by their offset */ + // Functions to retrieve resources by their offset void *GetData( DWORD dwOffset ) const - { - return &m_pSysMemData[dwOffset]; - } + { return &m_pSysMemData[dwOffset]; } LPDIRECT3DRESOURCE GetResource( DWORD dwOffset ) const - { - return RegisterResource( (LPDIRECT3DRESOURCE)GetData(dwOffset) ); - } + { return RegisterResource( (LPDIRECT3DRESOURCE)GetData(dwOffset) ); } LPDIRECT3DTEXTURE GetTexture( DWORD dwOffset ) const - { - return (LPDIRECT3DTEXTURE)GetResource( dwOffset ); - } + { return (LPDIRECT3DTEXTURE)GetResource( dwOffset ); } LPDIRECT3DVERTEXBUFFER GetVertexBuffer( DWORD dwOffset ) const - { - return (LPDIRECT3DVERTEXBUFFER)GetResource( dwOffset ); - } + { return (LPDIRECT3DVERTEXBUFFER)GetResource( dwOffset ); } - /* Functions to retrieve resources by their name */ + // Functions to retrieve resources by their name void *GetData( const char* strName ) const; LPDIRECT3DRESOURCE GetResource( const char* strName ) const - { - return RegisterResource( (LPDIRECT3DRESOURCE)GetData(strName)); - } + { return RegisterResource( (LPDIRECT3DRESOURCE)GetData( strName ) ); } LPDIRECT3DTEXTURE GetTexture( const char* strName ) const - { - return (LPDIRECT3DTEXTURE)GetResource( strName ); - } + { return (LPDIRECT3DTEXTURE)GetResource( strName ); } LPDIRECT3DVERTEXBUFFER GetVertexBuffer( const char* strName ) const - { - return (LPDIRECT3DVERTEXBUFFER)GetResource( strName ); - } + { return (LPDIRECT3DVERTEXBUFFER)GetResource( strName ); } - /* Constructor/destructor */ + // Constructor/destructor PackedResource(); ~PackedResource(); }; @@ -158,13 +143,13 @@ class PackedResource PackedResource::PackedResource() { - m_pSysMemData = NULL; - m_dwSysMemDataSize = 0L; - m_pVidMemData = NULL; - m_dwVidMemDataSize = 0L; - m_pResourceTags = NULL; + m_pSysMemData = NULL; + m_dwSysMemDataSize = 0L; + m_pVidMemData = NULL; + m_dwVidMemDataSize = 0L; + m_pResourceTags = NULL; m_dwNumResourceTags = 0L; - m_bInitialized = FALSE; + m_bInitialized = FALSE; } @@ -250,8 +235,8 @@ HRESULT PackedResource::Create(const char *strFilename) XPR_HEADER xprh; bool retval; #ifdef _XBOX1 - char strResourcePath[512]; BOOL bHasResourceOffsetsTable = FALSE; + char strResourcePath[512]; if (FAILED(FindMediaFile(strResourcePath, strFilename, sizeof(strResourcePath)))) return E_FAIL; @@ -285,7 +270,7 @@ HRESULT PackedResource::Create(const char *strFilename) return E_FAIL; } - /* Compute memory requirements */ + // Compute memory requirements #if defined(_XBOX1) m_dwSysMemDataSize = xprh.dwHeaderSize - sizeof(XPR_HEADER); m_dwVidMemDataSize = xprh.dwTotalSize - xprh.dwHeaderSize; @@ -294,7 +279,7 @@ HRESULT PackedResource::Create(const char *strFilename) m_dwVidMemDataSize = xprh.dwDataSize; #endif - /* Allocate memory */ + // Allocate memory m_pSysMemData = (BYTE*)malloc(m_dwSysMemDataSize); if (m_pSysMemData == NULL) { @@ -319,7 +304,7 @@ HRESULT PackedResource::Create(const char *strFilename) return E_FAIL; } - /* Read in the data from the file */ + // Read in the data from the file if( !ReadFile( hFile, m_pSysMemData, m_dwSysMemDataSize, &dwNumBytesRead, NULL) || !ReadFile( hFile, m_pVidMemData, m_dwVidMemDataSize, &dwNumBytesRead, NULL)) { @@ -327,7 +312,7 @@ HRESULT PackedResource::Create(const char *strFilename) return E_FAIL; } - /* Done with the file */ + // Done with the file CloseHandle( hFile); #ifdef _XBOX1 @@ -386,17 +371,16 @@ void PackedResource::GetResourceTags(DWORD* pdwNumResourceTags, void PackedResource::Destroy() { free(m_pSysMemData); + m_pSysMemData = NULL; + m_dwSysMemDataSize = 0L; - if (m_pVidMemData) + if (m_pVidMemData != NULL) FreeContiguousMemory(m_pVidMemData); - m_pSysMemData = NULL; - m_dwSysMemDataSize = 0L; + m_pVidMemData = NULL; + m_dwVidMemDataSize = 0L; - m_pVidMemData = NULL; - m_dwVidMemDataSize = 0L; - - m_pResourceTags = NULL; + m_pResourceTags = NULL; m_dwNumResourceTags = 0L; m_bInitialized = FALSE; @@ -546,6 +530,8 @@ static void *xdk360_init_font(void *video_data, if (!font) return NULL; + (void)font_size; + font->d3d = (d3d_video_t*)video_data; font->m_pFontTexture = NULL; @@ -613,10 +599,10 @@ static void xdk360_free_font(void *data) return; /* Destroy the font */ - font->m_pFontTexture = NULL; - font->m_dwNumGlyphs = 0L; - font->m_Glyphs = NULL; - font->m_cMaxGlyph = 0; + font->m_pFontTexture = NULL; + font->m_dwNumGlyphs = 0L; + font->m_Glyphs = NULL; + font->m_cMaxGlyph = 0; font->m_TranslatorTable = NULL; if (font->s_FontLocals.m_pFontPixelShader) @@ -626,12 +612,15 @@ static void xdk360_free_font(void *data) if (font->s_FontLocals.m_pFontVertexDecl) font->s_FontLocals.m_pFontVertexDecl->Release(); - font->s_FontLocals.m_pFontPixelShader = NULL; + font->s_FontLocals.m_pFontPixelShader = NULL; font->s_FontLocals.m_pFontVertexShader = NULL; - font->s_FontLocals.m_pFontVertexDecl = NULL; + font->s_FontLocals.m_pFontVertexDecl = NULL; if (m_xprResource.Initialized()) m_xprResource.Destroy(); + + free(font); + font = NULL; } static void xdk360_render_msg_post(xdk360_video_font_t * font) @@ -655,7 +644,7 @@ static void xdk360_render_msg_pre(xdk360_video_font_t * font) d3dr->GetRenderState( D3DRS_VIEWPORTENABLE, (DWORD*)&font->m_dwSavedState ); /* Set the texture scaling factor as a vertex shader constant. */ - D3DTexture_GetLevelDesc(font->m_pFontTexture, 0, &TextureDesc); /* Get the description */ + D3DTexture_GetLevelDesc(font->m_pFontTexture, 0, &TextureDesc); // Get the description /* Set render state. */ d3d_set_texture(d3dr, 0, font->m_pFontTexture); @@ -696,11 +685,11 @@ static void xdk360_draw_text(xdk360_video_font_t *font, * the vColor array. */ d3dr->SetVertexShaderConstantF(1, vColor, 1); - m_fCursorX = floorf(x); - m_fCursorY = floorf(y); + m_fCursorX = floorf(x); + m_fCursorY = floorf(y); /* Adjust for padding. */ - y -= font->m_fFontTopPadding; + y -= font->m_fFontTopPadding; /* Begin drawing the vertices * Declared as volatile to force writing in ascending @@ -710,7 +699,7 @@ static void xdk360_draw_text(xdk360_video_font_t *font, * memory. */ - dwNumChars = wcslen(strText); + dwNumChars = wcslen(strText); d3dr->BeginVertices(D3DPT_QUADLIST, 4 * dwNumChars, sizeof(XMFLOAT4), (void**)&pVertex); @@ -721,8 +710,8 @@ static void xdk360_draw_text(xdk360_video_font_t *font, #ifdef MSB_FIRST uint32_t tu1, tu2, tv1, tv2; #endif - const GLYPH_ATTR *pGlyph = NULL; - wchar_t letter = *strText++; /* Get the current letter in the string */ + const GLYPH_ATTR *pGlyph; + wchar_t letter = *strText++; /* Get the current letter in the string */ /* Handle the newline character. */ if (letter == L'\n') @@ -743,16 +732,16 @@ static void xdk360_draw_text(xdk360_video_font_t *font, fWidth = FONT_SCALE(font->d3d) * (float)pGlyph->wWidth; fHeight = FONT_SCALE(font->d3d) * font->m_fFontHeight; - m_fCursorX += fOffset; + m_fCursorX += fOffset; /* Add the vertices to draw this glyph. */ #ifdef MSB_FIRST /* Convert shorts to 32 bit longs for in register merging */ - tu1 = pGlyph->tu1; - tv1 = pGlyph->tv1; - tu2 = pGlyph->tu2; - tv2 = pGlyph->tv2; + tu1 = pGlyph->tu1; + tv1 = pGlyph->tv1; + tu2 = pGlyph->tu2; + tv2 = pGlyph->tv2; #endif /* NOTE: The vertexes are 2 floats for the screen coordinates, @@ -771,27 +760,27 @@ static void xdk360_draw_text(xdk360_video_font_t *font, /* Setup the vertex/screen coordinates */ - pVertex[0] = m_fCursorX; - pVertex[1] = m_fCursorY; - pVertex[3] = 0; - pVertex[4] = m_fCursorX + fWidth; - pVertex[5] = m_fCursorY; - pVertex[7] = 0; - pVertex[8] = m_fCursorX + fWidth; - pVertex[9] = m_fCursorY + fHeight; - pVertex[11] = 0; - pVertex[12] = m_fCursorX; - pVertex[13] = m_fCursorY + fHeight; + pVertex[0] = m_fCursorX; + pVertex[1] = m_fCursorY; + pVertex[3] = 0; + pVertex[4] = m_fCursorX + fWidth; + pVertex[5] = m_fCursorY; + pVertex[7] = 0; + pVertex[8] = m_fCursorX + fWidth; + pVertex[9] = m_fCursorY + fHeight; + pVertex[11] = 0; + pVertex[12] = m_fCursorX; + pVertex[13] = m_fCursorY + fHeight; #ifdef MSB_FIRST - ((volatile uint32_t *)pVertex)[2] = (tu1 << 16) | tv1; /* Merged using big endian rules */ - ((volatile uint32_t *)pVertex)[6] = (tu2 << 16) | tv1; /* Merged using big endian rules */ - ((volatile uint32_t*)pVertex)[10] = (tu2 << 16) | tv2; /* Merged using big endian rules */ - ((volatile uint32_t*)pVertex)[14] = (tu1 << 16) | tv2; /* Merged using big endian rules */ + ((volatile uint32_t *)pVertex)[2] = (tu1 << 16) | tv1; // Merged using big endian rules + ((volatile uint32_t *)pVertex)[6] = (tu2 << 16) | tv1; // Merged using big endian rules + ((volatile uint32_t*)pVertex)[10] = (tu2 << 16) | tv2; // Merged using big endian rules + ((volatile uint32_t*)pVertex)[14] = (tu1 << 16) | tv2; // Merged using big endian rules #endif - pVertex[15] = 0; + pVertex[15] = 0; + pVertex += 16; - pVertex += 16; - m_fCursorX += fAdvance; + m_fCursorX += fAdvance; dwNumChars--; } diff --git a/gfx/font_driver.c b/gfx/font_driver.c index 717800bd6a..9b6900121f 100644 --- a/gfx/font_driver.c +++ b/gfx/font_driver.c @@ -14,10 +14,6 @@ * If not, see . */ -#include - -#include - #include "font_driver.h" #include "video_thread_wrapper.h" @@ -28,6 +24,8 @@ #include "../config.h" #endif +#include + static const font_renderer_driver_t *font_backends[] = { #ifdef HAVE_FREETYPE &freetype_font_renderer, @@ -194,8 +192,7 @@ static bool vulkan_font_init_first( for (i = 0; vulkan_font_backends[i]; i++) { - void *data = vulkan_font_backends[i]->init( - video_data, font_path, font_size); + void *data = vulkan_font_backends[i]->init(video_data, font_path, font_size); if (!data) continue; @@ -356,9 +353,6 @@ void font_driver_free(void *font_data) if (font->renderer && font->renderer->free) font->renderer->free(font->renderer_data); - if (font->renderer_data) - free(font->renderer_data); - font->renderer = NULL; font->renderer_data = NULL; @@ -370,9 +364,9 @@ font_data_t *font_driver_init_first( void *video_data, const char *font_path, float font_size, bool threading_hint, enum font_driver_render_api api) { - const void *font_driver = NULL; - void *font_handle = NULL; - bool ok = false; + const void *font_driver; + void *font_handle; + bool ok = false; #ifdef HAVE_THREADS if (threading_hint @@ -401,15 +395,12 @@ font_data_t *font_driver_init_first( void font_driver_init_osd(void *video_data, bool threading_hint, enum font_driver_render_api api) { settings_t *settings = config_get_ptr(); - const char *path = settings->path.font; - if (video_font_driver) return; video_font_driver = font_driver_init_first(video_data, - (!string_is_empty(path)) ? path : NULL, - settings->video.font_size, - threading_hint, api); + *settings->path.font ? settings->path.font : NULL, + settings->video.font_size, threading_hint, api); if (!video_font_driver) RARCH_ERR("[font]: Failed to initialize OSD font.\n"); diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 0ebd227f01..40cfcaa5f7 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -1482,10 +1482,14 @@ void video_driver_set_viewport_core(void) /* Fallback to 1:1 pixel ratio if none provided */ if (geom->aspect_ratio > 0.0f) + { aspectratio_lut[ASPECT_RATIO_CORE].value = geom->aspect_ratio; + } else + { aspectratio_lut[ASPECT_RATIO_CORE].value = (float)geom->base_width / geom->base_height; + } } void video_driver_reset_custom_viewport(void) @@ -1648,7 +1652,8 @@ bool video_driver_find_driver(void) else { unsigned d; - RARCH_ERR("Couldn't find any video driver named \"%s\"\n", settings->video.driver); + RARCH_ERR("Couldn't find any video driver named \"%s\"\n", + settings->video.driver); RARCH_LOG_OUTPUT("Available video drivers are:\n"); for (d = 0; video_driver_find_handle(d); d++) RARCH_LOG_OUTPUT("\t%s\n", video_driver_find_ident(d)); @@ -1964,7 +1969,7 @@ void video_viewport_get_scaled_integer(struct video_viewport *vp, * geometry for the "normal" case. */ struct retro_system_av_info *av_info = video_viewport_get_system_av_info(); - unsigned base_height = 0; + unsigned base_height = 0; if (av_info) base_height = av_info->geometry.base_height; @@ -2225,20 +2230,20 @@ bool video_driver_translate_coord_viewport( if (scaled_screen_y < -0x7fff || scaled_screen_y > 0x7fff) scaled_screen_y = -0x8000; /* OOB */ - mouse_x -= vp->x; - mouse_y -= vp->y; + mouse_x -= vp->x; + mouse_y -= vp->y; - scaled_x = (2 * mouse_x * 0x7fff) / norm_full_vp_width - 0x7fff; - scaled_y = (2 * mouse_y * 0x7fff) / norm_full_vp_height - 0x7fff; + scaled_x = (2 * mouse_x * 0x7fff) / norm_full_vp_width - 0x7fff; + scaled_y = (2 * mouse_y * 0x7fff) / norm_full_vp_height - 0x7fff; if (scaled_x < -0x7fff || scaled_x > 0x7fff) - scaled_x = -0x8000; /* OOB */ + scaled_x = -0x8000; /* OOB */ if (scaled_y < -0x7fff || scaled_y > 0x7fff) - scaled_y = -0x8000; /* OOB */ + scaled_y = -0x8000; /* OOB */ - *res_x = scaled_x; - *res_y = scaled_y; - *res_screen_x = scaled_screen_x; - *res_screen_y = scaled_screen_y; + *res_x = scaled_x; + *res_y = scaled_y; + *res_screen_x = scaled_screen_x; + *res_screen_y = scaled_screen_y; return true; }