X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=7c38aa940d26fa1c45f5fc9639a9ca1fd7b17306;hb=2ae6ae8ed951e87fcba7c363705cd6ddea8de91c;hp=8f6fdee5871a1135fa4b93f10b8b9fce7edd5e5f;hpb=1100054eec7c45458359fd56072341bd661f4a9c;p=rocksndiamonds.git diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 8f6fdee5..7c38aa94 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -29,9 +29,6 @@ inline void SDLInitVideoDisplay(void) /* set default SDL depth */ video.default_depth = SDL_GetVideoInfo()->vfmt->BitsPerPixel; - - /* set exit function to automatically cleanup SDL stuff after exit() */ - atexit(SDL_Quit); } inline void SDLInitVideoBuffer(DrawBuffer **backbuffer, DrawWindow **window, @@ -678,6 +675,31 @@ void sge_LineRGB(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, sge_Line(Surface, x1, y1, x2, y2, SDL_MapRGB(Surface->format, R, G, B)); } +Bitmap *SDLLoadImage(char *filename) +{ + Bitmap *new_bitmap = CreateBitmapStruct(); + SDL_Surface *sdl_image_tmp; + + /* load image to temporary surface */ + if ((sdl_image_tmp = IMG_Load(filename)) == NULL) + Error(ERR_EXIT, "IMG_Load() failed: %s", SDL_GetError()); + + /* create native non-transparent surface for current image */ + if ((new_bitmap->surface = SDL_DisplayFormat(sdl_image_tmp)) == NULL) + Error(ERR_EXIT, "SDL_DisplayFormat() failed: %s", SDL_GetError()); + + /* create native transparent surface for current image */ + SDL_SetColorKey(sdl_image_tmp, SDL_SRCCOLORKEY, + SDL_MapRGB(sdl_image_tmp->format, 0x00, 0x00, 0x00)); + if ((new_bitmap->surface_masked = SDL_DisplayFormat(sdl_image_tmp)) == NULL) + Error(ERR_EXIT, "SDL_DisplayFormat() failed: %s", SDL_GetError()); + + /* free temporary surface */ + SDL_FreeSurface(sdl_image_tmp); + + return new_bitmap; +} + /* ========================================================================= */ /* audio functions */