X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=480677c31bb117b3f26c07ccca2351f6841a2b42;hb=d0409bd76aa84a8745ec2ea6d8a5480c8bea0bcd;hp=d1bbe6efb28a1364ca4cde856b835c7553180f80;hpb=2f3a28bda17371321ce501789664ebd6c9456cd9;p=rocksndiamonds.git diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index d1bbe6ef..480677c3 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -145,10 +145,14 @@ static void UpdateScreen(SDL_Rect *rect) SDL_SetRenderTarget(sdl_renderer, NULL); SDL_RenderCopy(sdl_renderer, sdl_texture_target, NULL, NULL); } +#endif - // show render target buffer on screen - SDL_RenderPresent(sdl_renderer); + // global synchronization point of the game to align video frame delay + WaitUntilDelayReached(&video.frame_delay, video.frame_delay_value); +#if defined(TARGET_SDL2) + // show render target buffer on screen + SDL_RenderPresent(sdl_renderer); #else // TARGET_SDL if (rect) SDL_UpdateRects(screen, 1, rect); @@ -742,6 +746,17 @@ void SDLSetWindowScalingQuality(char *window_scaling_quality) video.window_scaling_quality = window_scaling_quality; } +void SDLSetScreenRenderingMode(char *screen_rendering_mode) +{ + video.screen_rendering_mode = + (strEqual(screen_rendering_mode, STR_SPECIAL_RENDERING_BITMAP) ? + SPECIAL_RENDERING_BITMAP : + strEqual(screen_rendering_mode, STR_SPECIAL_RENDERING_TARGET) ? + SPECIAL_RENDERING_TARGET: + strEqual(screen_rendering_mode, STR_SPECIAL_RENDERING_DOUBLE) ? + SPECIAL_RENDERING_DOUBLE : SPECIAL_RENDERING_OFF); +} + void SDLSetWindowFullscreen(boolean fullscreen) { if (sdl_window == NULL) @@ -1158,10 +1173,7 @@ void SDLFadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height, while (time_current < time_post_delay) { - // do not wait longer than 10 ms at a time to be able to ... - Delay(MIN(10, time_post_delay - time_current)); - - // ... continue drawing global animations during post delay + // updating the screen contains waiting for frame delay (non-busy) UpdateScreen(NULL); time_current = SDL_GetTicks();