From: Paul Cercueil Date: Mon, 7 Oct 2013 15:14:09 +0000 (+0200) Subject: Add a couple of fixes to allow double buffering to work X-Git-Tag: v1.91~11 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb7ce29e8dcfe0835a0b0193e99ca76f4ed6dcd1;p=picodrive.git Add a couple of fixes to allow double buffering to work --- diff --git a/platform/common/emu.c b/platform/common/emu.c index 18f63f2c..12d8c095 100644 --- a/platform/common/emu.c +++ b/platform/common/emu.c @@ -1379,6 +1379,8 @@ void emu_loop(void) { notice_msg_time = 0; plat_status_msg_clear(); + plat_video_flip(); + plat_status_msg_clear(); /* Do it again in case of double buffering */ notice_msg = NULL; } else { diff --git a/platform/common/plat_sdl.c b/platform/common/plat_sdl.c index 600af45a..fc7b200e 100644 --- a/platform/common/plat_sdl.c +++ b/platform/common/plat_sdl.c @@ -125,9 +125,11 @@ void plat_video_flip(void) gl_flip(shadow_fb, g_screen_width, g_screen_height); } else { - // XXX: no locking, but should be fine with SDL_SWSURFACE? + if (SDL_MUSTLOCK(plat_sdl_screen)) + SDL_UnlockSurface(plat_sdl_screen); SDL_Flip(plat_sdl_screen); g_screen_ptr = plat_sdl_screen->pixels; + PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2); } } @@ -147,7 +149,8 @@ void plat_video_menu_begin(void) g_menuscreen_ptr = shadow_fb; } else { - SDL_LockSurface(plat_sdl_screen); + if (SDL_MUSTLOCK(plat_sdl_screen)) + SDL_LockSurface(plat_sdl_screen); g_menuscreen_ptr = plat_sdl_screen->pixels; } } @@ -169,7 +172,8 @@ void plat_video_menu_end(void) gl_flip(g_menuscreen_ptr, g_menuscreen_w, g_menuscreen_h); } else { - SDL_UnlockSurface(plat_sdl_screen); + if (SDL_MUSTLOCK(plat_sdl_screen)) + SDL_UnlockSurface(plat_sdl_screen); SDL_Flip(plat_sdl_screen); } g_menuscreen_ptr = NULL; @@ -188,9 +192,11 @@ void plat_video_loop_prepare(void) g_screen_ptr = shadow_fb; } else { - SDL_LockSurface(plat_sdl_screen); + if (SDL_MUSTLOCK(plat_sdl_screen)) + SDL_LockSurface(plat_sdl_screen); g_screen_ptr = plat_sdl_screen->pixels; } + PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2); } void plat_early_init(void)