perfect vsync, bugfixes
[fceu.git] / drivers / gp2x / gp2x-video.c
index ef4a4dc..d8524b6 100644 (file)
@@ -99,16 +99,12 @@ int InitVideo(void)
 }
 
 
-void ToggleFS(void)
-{
-}
-
-
-// 16: rrrr rggg gggb bbbb
+// 16: rrrr rggg gg0b bbbb
 void FCEUD_SetPalette(uint8 index, uint8 r, uint8 g, uint8 b)
 {
+       /* note: menu depends on bit5 being 0 */
        gp2x_palette[index] = (r << 16) | (g << 8) | b;
-       gp2x_palette16[index] = ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | (b >> 3);
+       gp2x_palette16[index] = ((r & 0xf8) << 8) | ((g & 0xf8) << 3) | (b >> 3);
        gp2x_video_setpalette(gp2x_palette, index + 1);
 
        paletterefresh = 1;
@@ -160,19 +156,17 @@ static INLINE void printFps(uint8 *screen)
 }
 
 
-void BlitScreen(uint8 *buf)
+void BlitPrepare(int skip)
 {
        framesEmulated++;
 
-       if (!buf) {
+       if (skip) {
                printFps(0);
                return;
        }
 
        framesRendered++;
 
-       printFps(gp2x_screen);
-
        if (eoptions & EO_CLIPSIDES)
        {
                int i, *p = (int *) ((char *)gp2x_screen + 32);
@@ -182,6 +176,8 @@ void BlitScreen(uint8 *buf)
                }
        }
 
+       printFps(gp2x_screen);
+
        if (Settings.scaling == 3)
        {
                soft_scale((char *)gp2x_screen + 32, gp2x_palette16, srendline, erendline-srendline);
@@ -189,8 +185,18 @@ void BlitScreen(uint8 *buf)
                        memset32((int *)((char *)gp2x_screen + 32), 0, srendline*320*2/4);
        }
 
-       gp2x_video_flip();
-       XBuf = gp2x_screen;
+       /* at this point we should be done with the frame */
+       gp2x_video_flush_cache();
+}
+
+
+void BlitScreen(int skip)
+{
+       if (!skip)
+       {
+               gp2x_video_flip();
+               XBuf = gp2x_screen;
+       }
 }