mirror of
https://github.com/thepigeongenerator/tetris_clone.git
synced 2025-12-17 14:05:45 +01:00
improved safety of renderer
This commit is contained in:
@@ -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};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user