X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=8c0eff67376821d860115f1ee2be9ece494347f9;hb=681721dddc91bcdaef50002d1e861cc8d484e938;hp=18de01b3425b9c109224e28773cd38e506820910;hpb=e0560b41a1796a02b15937b0ae5453bca745e5ff;p=rocksndiamonds.git diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 18de01b3..8c0eff67 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2000 Artsoft Entertainment * +* (c) 1994-2001 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -62,16 +62,18 @@ inline void SDLInitVideoBuffer(DrawBuffer **backbuffer, DrawWindow **window, inline boolean SDLSetVideoMode(DrawBuffer **backbuffer, boolean fullscreen) { boolean success = TRUE; - int surface_flags = SDL_HWSURFACE | (fullscreen ? SDL_FULLSCREEN : 0); + int surface_flags_fullscreen = SURFACE_FLAGS | SDL_FULLSCREEN; + int surface_flags_window = SURFACE_FLAGS; + SDL_Surface *new_surface = NULL; + + if (*backbuffer == NULL) + *backbuffer = CreateBitmapStruct(); if (fullscreen && !video.fullscreen_enabled && video.fullscreen_available) { /* switch display to fullscreen mode, if available */ - DrawWindow *window_old = *backbuffer; - DrawWindow *window_new = CreateBitmapStruct(); - - if ((window_new->surface = SDL_SetVideoMode(video.width, video.height, - video.depth, surface_flags)) + if ((new_surface = SDL_SetVideoMode(video.width, video.height, + video.depth, surface_flags_fullscreen)) == NULL) { /* switching display to fullscreen mode failed */ @@ -83,23 +85,18 @@ inline boolean SDLSetVideoMode(DrawBuffer **backbuffer, boolean fullscreen) } else { - if (window_old) - FreeBitmap(window_old); - *backbuffer = window_new; + (*backbuffer)->surface = new_surface; video.fullscreen_enabled = TRUE; success = TRUE; } } - if ((!fullscreen && video.fullscreen_enabled) || !*backbuffer) + if ((!fullscreen && video.fullscreen_enabled) || new_surface == NULL) { /* switch display to window mode */ - DrawWindow *window_old = *backbuffer; - DrawWindow *window_new = CreateBitmapStruct(); - - if ((window_new->surface = SDL_SetVideoMode(video.width, video.height, - video.depth, surface_flags)) + if ((new_surface = SDL_SetVideoMode(video.width, video.height, + video.depth, surface_flags_window)) == NULL) { /* switching display to window mode failed -- should not happen */ @@ -109,9 +106,7 @@ inline boolean SDLSetVideoMode(DrawBuffer **backbuffer, boolean fullscreen) } else { - if (window_old) - FreeBitmap(window_old); - *backbuffer = window_new; + (*backbuffer)->surface = new_surface; video.fullscreen_enabled = FALSE; success = TRUE; @@ -748,6 +743,7 @@ inline void SDLCloseAudio(void) Mix_HaltChannel(-1); Mix_CloseAudio(); + SDL_QuitSubSystem(SDL_INIT_AUDIO); } #endif /* TARGET_SDL */