Add a couple of fixes to allow double buffering to work
authorPaul Cercueil <paul@crapouillou.net>
Mon, 7 Oct 2013 15:14:09 +0000 (17:14 +0200)
committernotaz <notasas@gmail.com>
Wed, 9 Oct 2013 23:57:11 +0000 (02:57 +0300)
platform/common/emu.c
platform/common/plat_sdl.c

index 18f63f2..12d8c09 100644 (file)
@@ -1379,6 +1379,8 @@ void emu_loop(void)
                        {\r
                                notice_msg_time = 0;\r
                                plat_status_msg_clear();\r
+                               plat_video_flip();\r
+                               plat_status_msg_clear(); /* Do it again in case of double buffering */\r
                                notice_msg = NULL;\r
                        }\r
                        else {\r
index 600af45..fc7b200 100644 (file)
@@ -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)