X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=a204e45ff13332cb09019531c551f78e3c7a2119;hb=b003831ec2ccf7b14d2aa094466bdeb6c2f1d048;hp=1d93b5a0782d3addac82a2ce20f3adbe1d69b671;hpb=bb0b4d6b538a625aaa98a25190891ef1fb766168;p=rocksndiamonds.git diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 1d93b5a0..a204e45f 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -558,8 +558,7 @@ static SDL_Surface *SDLCreateScreen(DrawBuffer **backbuffer, new_surface = SDL_CreateRGBSurface(0, width, height, 32, 0,0,0, 0); if (new_surface == NULL) - Error(ERR_WARN, "SDL_CreateRGBSurface() failed: %s", - SDL_GetError()); + Error(ERR_WARN, "SDL_CreateRGBSurface() failed: %s", SDL_GetError()); } else { @@ -576,8 +575,41 @@ static SDL_Surface *SDLCreateScreen(DrawBuffer **backbuffer, Error(ERR_WARN, "SDL_CreateWindow() failed: %s", SDL_GetError()); } -#else - new_surface = SDL_SetVideoMode(width, height, video.depth, surface_flags); +#else // TARGET_SDL + + if ((*backbuffer)->surface) + { + SDL_FreeSurface((*backbuffer)->surface); + (*backbuffer)->surface = NULL; + } + + if (gfx.final_screen_bitmap == NULL) + gfx.final_screen_bitmap = CreateBitmapStruct(); + + gfx.final_screen_bitmap->width = width; + gfx.final_screen_bitmap->height = height; + + gfx.final_screen_bitmap->surface = + SDL_SetVideoMode(width, height, video.depth, surface_flags); + + if (gfx.final_screen_bitmap->surface != NULL) + { + new_surface = + SDL_CreateRGBSurface(surface_flags, width, height, video.depth, 0,0,0, 0); + + if (new_surface == NULL) + Error(ERR_WARN, "SDL_CreateRGBSurface() failed: %s", SDL_GetError()); + +#if 0 + new_surface = gfx.final_screen_bitmap->surface; + gfx.final_screen_bitmap = NULL; +#endif + + } + else + { + Error(ERR_WARN, "SDL_SetVideoMode() failed: %s", SDL_GetError()); + } #endif #if defined(TARGET_SDL2) @@ -610,10 +642,7 @@ boolean SDLSetVideoMode(DrawBuffer **backbuffer, boolean fullscreen) if (new_surface == NULL) { - /* switching display to fullscreen mode failed */ - Error(ERR_WARN, "SDL_SetVideoMode() failed: %s", SDL_GetError()); - - /* do not try it again */ + /* switching display to fullscreen mode failed -- do not try it again */ video.fullscreen_available = FALSE; success = FALSE; @@ -636,7 +665,6 @@ boolean SDLSetVideoMode(DrawBuffer **backbuffer, boolean fullscreen) if (new_surface == NULL) { /* switching display to window mode failed -- should not happen */ - Error(ERR_WARN, "SDL_SetVideoMode() failed: %s", SDL_GetError()); success = FALSE; } @@ -866,20 +894,8 @@ void SDLCopyArea(Bitmap *src_bitmap, Bitmap *dst_bitmap, src_bitmap->surface_masked : src_bitmap->surface), &src_rect, real_dst_bitmap->surface, &dst_rect); -#if defined(TARGET_SDL2) if (dst_bitmap == window) - { - // SDL_UpdateWindowSurface(sdl_window); - // SDL_UpdateWindowSurfaceRects(sdl_window, &dst_rect, 1); - UpdateScreen(&dst_rect); - } -#else - if (dst_bitmap == window) - { - // SDL_UpdateRect(backbuffer->surface, dst_x, dst_y, width, height); UpdateScreen(&dst_rect); - } -#endif } void SDLBlitTexture(Bitmap *bitmap,