X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=inline;f=src%2Flibgame%2Fsdl.c;h=a4fbf7dee3d12997c9cc817a21b40507b755d1b9;hb=d2098db6b7b0cee3b43e341c012beec5bc6ef6bd;hp=8f6fdee5871a1135fa4b93f10b8b9fce7edd5e5f;hpb=1100054eec7c45458359fd56072341bd661f4a9c;p=rocksndiamonds.git diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 8f6fdee5..a4fbf7de 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -24,14 +24,11 @@ inline void SDLInitVideoDisplay(void) { /* initialize SDL video */ - if (SDL_Init(SDL_INIT_VIDEO) < 0) - Error(ERR_EXIT, "SDL_Init() failed: %s", SDL_GetError()); + if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) + Error(ERR_EXIT, "SDL_InitSubSystem() failed: %s", SDL_GetError()); /* 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 */ @@ -685,9 +707,9 @@ void sge_LineRGB(SDL_Surface *Surface, Sint16 x1, Sint16 y1, Sint16 x2, inline boolean SDLOpenAudio(void) { - if (SDL_Init(SDL_INIT_AUDIO) < 0) + if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) { - Error(ERR_WARN, "SDL_Init() failed: %s", SDL_GetError()); + Error(ERR_WARN, "SDL_InitSubSystem() failed: %s", SDL_GetError()); return FALSE; }