diff options
author | Ludovic Pouzenc <lpouzenc@gmail.com> | 2013-07-19 21:44:09 +0200 |
---|---|---|
committer | Ludovic Pouzenc <lpouzenc@gmail.com> | 2013-07-19 21:44:09 +0200 |
commit | 2dc612b3115e7391582a526be524971e19078425 (patch) | |
tree | 53dd65b5f0b3bb4e3f6345cbaa1599ab38cacad8 /src/loader.c | |
parent | 9deb747bd914741a5a6f794568dfc9e53d8ec924 (diff) | |
download | mplemmings-2dc612b3115e7391582a526be524971e19078425.tar.gz mplemmings-2dc612b3115e7391582a526be524971e19078425.tar.bz2 mplemmings-2dc612b3115e7391582a526be524971e19078425.zip |
Debut adaptation paint_terrain(). Modif des tiles de texture vers
surfaces car blitting custom manuel.
Diffstat (limited to 'src/loader.c')
-rw-r--r-- | src/loader.c | 54 |
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; +} + |