diff --git a/src/twn_textures.c b/src/twn_textures.c index baae49f..eba5ac4 100644 --- a/src/twn_textures.c +++ b/src/twn_textures.c @@ -13,8 +13,6 @@ #include #include -#include -#include static SDL_Surface *image_to_surface(const char *path) { @@ -22,12 +20,9 @@ static SDL_Surface *image_to_surface(const char *path) { if (handle == NULL) goto ERR_CANNOT_OPEN_FILE; - /* TODO: try using callbacks so that less memory is used */ - Sint64 file_size = handle->size(handle); - SDL_assert_always(file_size != -1); - void *file_mem = malloc(file_size); - size_t read = handle->read(handle, file_mem, 1, file_size); - SDL_assert_always(read == (size_t)file_size); + /* TODO: try using callbacks so that no loading of whole files is needed */ + size_t file_size; + void *file_mem = SDL_LoadFile_RW(handle, &file_size, 0); SDL_FreeRW(handle); if (!file_mem) @@ -38,7 +33,7 @@ static SDL_Surface *image_to_surface(const char *path) { if (!image_mem) goto ERR_CANNOT_READ_IMAGE; - free(file_mem); + SDL_free(file_mem); Uint32 rmask, gmask, bmask, amask; @@ -70,11 +65,9 @@ ERR_CANNOT_CREATE_SURFACE: stbi_image_free(image_mem); ERR_CANNOT_READ_IMAGE: - free(file_mem); + SDL_free(file_mem); ERR_CANNOT_ALLOCATE_MEM: - SDL_FreeRW(handle); - ERR_CANNOT_OPEN_FILE: CRY(path, "Failed to load image. Aborting..."); die_abruptly(); @@ -251,7 +244,7 @@ void textures_cache_init(TextureCache *cache, SDL_Window *window) { cache->window = window; sh_new_arena(cache->hash); - cache->node_buffer = cmalloc(sizeof *cache->node_buffer * TEXTURE_ATLAS_SIZE); + cache->node_buffer = SDL_calloc(TEXTURE_ATLAS_SIZE, sizeof *cache->node_buffer); add_new_atlas(cache); recreate_current_atlas_texture(cache); @@ -278,7 +271,7 @@ void textures_cache_deinit(TextureCache *cache) { } shfree(cache->hash); - free(cache->node_buffer); + SDL_free(cache->node_buffer); }