summaryrefslogtreecommitdiff
path: root/src/loader.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/loader.c')
-rw-r--r--src/loader.c54
1 files changed, 34 insertions, 20 deletions
diff --git a/src/loader.c b/src/loader.c
index 0d16c48..b2ea9bf 100644
--- a/src/loader.c
+++ b/src/loader.c
@@ -4,6 +4,7 @@
#include <SDL_image.h>
int loadSprite(SDL_Renderer *rend, char *giffilepath, int frames, sprite_t *sprite);
+int loadSurface(SDL_Renderer *rend, char *giffilepath, SDL_Surface **surf);
int loadStyleRes(SDL_Renderer *rend, gameIni_t *gIni, char data_basepath[], gameRess_t *gRess) {
int i, res;
@@ -12,7 +13,7 @@ int loadStyleRes(SDL_Renderer *rend, gameIni_t *gIni, char data_basepath[], game
for(i=0; i < gIni->style.tiles; i++) {
(void) SDL_snprintf(filepath, MAX_PATH_LEN, "%s/style/%s/%s_%d.gif", data_basepath, stylename, stylename, i);
- res=loadSprite(rend,filepath,1,&gRess->tiles[i]);
+ res=loadSurface(rend,filepath,&gRess->tiles[i]);
if (res != 0) return res;
}
@@ -34,8 +35,11 @@ int loadStyleRes(SDL_Renderer *rend, gameIni_t *gIni, char data_basepath[], game
void unloadStyleRes(gameRess_t *gRess) {
int i;
+
+ /* Nullpointer checked for surface but not for textures in SDL code */
for(i=0; i<MAX_TILES_COUNT;i++) {
- DESTROYTEXTURE_SAFE(gRess->tiles[i].t);
+ SDL_FreeSurface(gRess->tiles[i]);
+ gRess->tiles[i] = NULL;
}
for(i=0; i<MAX_OBJECTS_COUNT;i++) {
DESTROYTEXTURE_SAFE(gRess->objects[i].t);
@@ -106,9 +110,8 @@ void unloadMiscRes(gameRess_t *gRess) {
/* frames is for animated sprites and is the number of images. Assumed to be all in a column */
int loadSprite(SDL_Renderer *rend, char *giffilepath, int frames, sprite_t *sprite) {
+ int res;
SDL_Surface *surf;
- SDL_RWops *rwop;
- //int res;
MPL_CHECK(
frames > 0,
@@ -118,22 +121,8 @@ int loadSprite(SDL_Renderer *rend, char *giffilepath, int frames, sprite_t *spri
giffilepath, frames
);
- rwop = SDL_RWFromFile(giffilepath,"r");
- MPL_CHECK(
- rwop,
- {return 2;},
- SDL_LOG_PRIORITY_WARN,
- "loadSprite(rend, \"%s\", frames, sprite) failed : problem opening file", giffilepath
- );
- surf = IMG_LoadGIF_RW(rwop);
- SDL_RWclose(rwop);
-
- MPL_CHECK(
- surf,
- {return 3;},
- SDL_LOG_PRIORITY_WARN,
- "loadSprite(rend, \"%s\", frames, sprite) failed : can't decode file", giffilepath
- );
+ res = loadSurface(rend, giffilepath, &surf);
+ if (res !=0) return res;
sprite->t = SDL_CreateTextureFromSurface(rend, surf);
MPL_CHECK(
@@ -154,3 +143,28 @@ int loadSprite(SDL_Renderer *rend, char *giffilepath, int frames, sprite_t *spri
return 0;
}
+int loadSurface(SDL_Renderer *rend, char *giffilepath, SDL_Surface **surf) {
+ SDL_RWops *rwop;
+ //int res;
+
+ rwop = SDL_RWFromFile(giffilepath,"r");
+ MPL_CHECK(
+ rwop,
+ {return 2;},
+ SDL_LOG_PRIORITY_WARN,
+ "loadSurface(rend, \"%s\", frames, sprite) failed : problem opening file", giffilepath
+ );
+ *surf = IMG_LoadGIF_RW(rwop);
+ SDL_RWclose(rwop);
+
+ MPL_CHECK(
+ *surf,
+ {return 3;},
+ SDL_LOG_PRIORITY_WARN,
+ "loadSurface(rend, \"%s\", frames, sprite) failed : can't decode file", giffilepath
+ );
+
+ // TODO : conversion en fonction du renderer ou bien systématiquement en ARGB8888, a voir.
+ return 0;
+}
+