From f695a035c8978129217201d60dfc4fc5e485882a Mon Sep 17 00:00:00 2001 From: Andrew Kesterson Date: Fri, 15 May 2026 11:07:31 -0400 Subject: [PATCH] Add a low FPS callback to aid in debugging, and fix a huge memory leak in akgl_text_rendertextat --- include/akgl/SDL_GameControllerDB.h | 2 +- include/akgl/game.h | 2 ++ src/game.c | 10 ++++++++++ src/text.c | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/include/akgl/SDL_GameControllerDB.h b/include/akgl/SDL_GameControllerDB.h index 37a4925..a222125 100644 --- a/include/akgl/SDL_GameControllerDB.h +++ b/include/akgl/SDL_GameControllerDB.h @@ -1,7 +1,7 @@ #ifndef _SDL_GAMECONTROLLERDB_H_ #define _SDL_GAMECONTROLLERDB_H_ -// Taken from https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/refs/heads/master/gamecontrollerdb.txt on Wed May 13 11:34:15 PM EDT 2026 +// Taken from https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/refs/heads/master/gamecontrollerdb.txt on Fri May 15 11:05:32 AM EDT 2026 #define AKGL_SDL_GAMECONTROLLER_DB_LEN 2228 diff --git a/include/akgl/game.h b/include/akgl/game.h index a52c58b..b22d69c 100644 --- a/include/akgl/game.h +++ b/include/akgl/game.h @@ -37,6 +37,7 @@ typedef struct { SDL_Time lastIterTime; SDL_Time lastFPSTime; int16_t framesSinceUpdate; + void (*lowfpsfunc)(void); } akgl_Game; extern SDL_Window *window; @@ -58,5 +59,6 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_game_init_screen(); void akgl_game_updateFPS(); akerr_ErrorContext AKERR_NOIGNORE *akgl_game_save(char *fpath); akerr_ErrorContext AKERR_NOIGNORE *akgl_game_load(char *fpath); +void akgl_game_lowfps(void); #endif //_AKGL_GAME_H_ diff --git a/src/game.c b/src/game.c index ae97dc5..6dd75db 100644 --- a/src/game.c +++ b/src/game.c @@ -30,6 +30,12 @@ MIX_Track *akgl_tracks[AKGL_GAME_AUDIO_MAX_TRACKS]; SDL_FRect camera; akgl_Game game; +void akgl_game_lowfps(void) +{ + SDL_Log("Low FPS! %d", game.fps); + return; +} + akerr_ErrorContext AKERR_NOIGNORE *akgl_game_init() { int screenwidth = 0; @@ -42,6 +48,7 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_game_init() game.gameStartTime = SDL_GetTicksNS(); game.lastIterTime = game.gameStartTime; game.lastFPSTime = game.gameStartTime; + game.lowfpsfunc = &akgl_game_lowfps; FAIL_ZERO_BREAK(errctx, strlen((char *)&game.name), AKERR_NULLPOINTER, "Must provide game name"); FAIL_ZERO_BREAK(errctx, strlen((char *)&game.version), AKERR_NULLPOINTER, "Must provide game version"); FAIL_ZERO_BREAK(errctx, strlen((char *)&game.uri), AKERR_NULLPOINTER, "Must provide game uri"); @@ -142,6 +149,9 @@ void akgl_game_updateFPS() game.framesSinceUpdate = 0; game.lastFPSTime = curTime; } + if ( game.fps < 30 ) { + game.lowfpsfunc(); + } game.framesSinceUpdate += 1; game.lastIterTime = curTime; } diff --git a/src/text.c b/src/text.c index 29bc8c4..40a4b7c 100644 --- a/src/text.c +++ b/src/text.c @@ -56,5 +56,6 @@ akerr_ErrorContext AKERR_NOIGNORE *akgl_text_rendertextat(TTF_Font *font, char * SDL_GetTextureSize(texture, &dest.w, &dest.h); FAIL_ZERO_RETURN(errctx, SDL_RenderTexture(renderer, texture, NULL, &dest), AKERR_NULLPOINTER, "%s", SDL_GetError()); SDL_DestroyTexture(texture); + SDL_DestroySurface(textsurf); SUCCEED_RETURN(errctx); }