improved safety of renderer

This commit is contained in:
2025-04-16 11:53:47 +02:00
parent 0df7730838
commit 1b384af8e9

View File

@@ -10,6 +10,7 @@
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <time.h> #include <time.h>
#include <wchar.h> #include <wchar.h>
@@ -64,8 +65,7 @@ static void draw_score_text(renderdata const* dat) {
SDL_Surface* const txt_surface = TTF_RenderText_Solid(font, score_text, (SDL_Colour){COLOUR_SCORE.r, COLOUR_SCORE.g, COLOUR_SCORE.b, COLOUR_SCORE.a}); SDL_Surface* const txt_surface = TTF_RenderText_Solid(font, score_text, (SDL_Colour){COLOUR_SCORE.r, COLOUR_SCORE.g, COLOUR_SCORE.b, COLOUR_SCORE.a});
SDL_Texture* const txt_texture = SDL_CreateTextureFromSurface(renderer, txt_surface); SDL_Texture* const txt_texture = SDL_CreateTextureFromSurface(renderer, txt_surface);
// BUG: inspect memory leak somewhere over here if (cache->score_texture != NULL || cache->score_surface != NULL) {
if (cache->score_texture != NULL) {
// free old data // free old data
SDL_FreeSurface(cache->score_surface); SDL_FreeSurface(cache->score_surface);
SDL_DestroyTexture(cache->score_texture); SDL_DestroyTexture(cache->score_texture);
@@ -76,6 +76,11 @@ static void draw_score_text(renderdata const* dat) {
cache->score_texture = txt_texture; cache->score_texture = txt_texture;
} }
if (cache->score_surface == NULL || cache->score_texture == NULL) {
error("the score texture was unavailable!");
return;
}
SDL_Rect text_rect = {get_column_pos(COLUMNS + 1), get_row_pos(0), cache->score_surface->w, cache->score_surface->h}; SDL_Rect text_rect = {get_column_pos(COLUMNS + 1), get_row_pos(0), cache->score_surface->w, cache->score_surface->h};
SDL_RenderCopy(renderer, cache->score_texture, NULL, &text_rect); SDL_RenderCopy(renderer, cache->score_texture, NULL, &text_rect);
} }
@@ -150,6 +155,8 @@ void render_free(renderdata* const render_data) {
SDL_DestroyRenderer(render_data->renderer); SDL_DestroyRenderer(render_data->renderer);
SDL_DestroyWindow(render_data->window); SDL_DestroyWindow(render_data->window);
TTF_CloseFont(render_data->font); TTF_CloseFont(render_data->font);
SDL_FreeSurface(render_data->cache->score_surface);
SDL_DestroyTexture(render_data->cache->score_texture);
free(render_data->cache); free(render_data->cache);
*render_data = (renderdata){0}; *render_data = (renderdata){0};
} }