tune flip calls and frame setup
authornotaz <notasas@gmail.com>
Sun, 28 Jul 2013 13:45:13 +0000 (16:45 +0300)
committernotaz <notasas@gmail.com>
Sun, 28 Jul 2013 20:28:53 +0000 (23:28 +0300)
for pandora, mostly

pico/draw.c
platform/common/emu.c
platform/common/emu.h
platform/gp2x/plat.c
platform/pandora/plat.c

index d24d5d7..ede11f5 100644 (file)
@@ -1424,11 +1424,6 @@ PICO_INTERNAL void PicoFrameStart(void)
     lines = 240;\r
   }\r
 \r
-  HighCol = HighColBase + offs * HighColIncrement;\r
-  DrawLineDest = (char *)DrawLineDestBase + offs * DrawLineDestIncrement;\r
-  DrawScanline = 0;\r
-  skip_next_line = 0;\r
-\r
   if (rendstatus != rendstatus_old || lines != rendlines) {\r
     rendlines = lines;\r
     // mode_change() might reset rendstatus_old by calling SetColorFormat\r
@@ -1437,6 +1432,11 @@ PICO_INTERNAL void PicoFrameStart(void)
     rendstatus_old = rendstatus;\r
   }\r
 \r
+  HighCol = HighColBase + offs * HighColIncrement;\r
+  DrawLineDest = (char *)DrawLineDestBase + offs * DrawLineDestIncrement;\r
+  DrawScanline = 0;\r
+  skip_next_line = 0;\r
+\r
   if (PicoOpt & POPT_ALT_RENDERER)\r
     return;\r
 \r
index b828595..4098bd2 100644 (file)
@@ -48,7 +48,8 @@ currentConfig_t currentConfig, defaultConfig;
 int state_slot = 0;\r
 int config_slot = 0, config_slot_current = 0;\r
 int pico_pen_x = 320/2, pico_pen_y = 240/2;\r
-int pico_inp_mode = 0;\r
+int pico_inp_mode;\r
+int flip_after_sync;\r
 int engineState = PGS_Menu;\r
 \r
 static short __attribute__((aligned(4))) sndBuffer[2*44100/50];\r
@@ -1431,7 +1432,8 @@ void emu_loop(void)
                PicoFrame();\r
                pemu_finalize_frame(fpsbuff, notice_msg);\r
 \r
-               // plat_video_flip();\r
+               if (!flip_after_sync)\r
+                       plat_video_flip();\r
 \r
                /* frame limiter */\r
                if (!reset_timing && !(currentConfig.EmuOpt & (EOPT_NO_FRMLIMIT|EOPT_EXT_FRMLIMIT)))\r
@@ -1449,9 +1451,8 @@ void emu_loop(void)
                        }\r
                }\r
 \r
-               // XXX: for some plats it might be better to flip before vsync\r
-               // (due to shadow registers in display hw)\r
-               plat_video_flip();\r
+               if (flip_after_sync)\r
+                       plat_video_flip();\r
 \r
                pframes_done++; frames_done++; frames_shown++;\r
 \r
index d721f94..836d7d4 100644 (file)
@@ -82,6 +82,7 @@ extern int state_slot;
 extern int config_slot, config_slot_current;
 extern unsigned char *movie_data;
 extern int reset_timing;
+extern int flip_after_sync;
 
 #define PICO_PEN_ADJUST_X 4
 #define PICO_PEN_ADJUST_Y 2
index 8815453..2a3b079 100644 (file)
@@ -202,6 +202,7 @@ void plat_init(void)
                in_set_config(in_name_to_id("evdev:pollux-analog"), IN_CFG_KEY_NAMES,
                                caanoo_keys, sizeof(caanoo_keys));
 
+       flip_after_sync = 1;
        gp2x_menu_init();
 }
 
index 72c63aa..a9fa992 100644 (file)
@@ -300,9 +300,6 @@ void emu_video_mode_change(int start_line, int line_count, int is_32cols)
        if (doing_bg_frame)\r
                return;\r
 \r
-       PicoDrawSetOutFormat(PDF_RGB555, 1);\r
-       PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2);\r
-\r
        if (is_32cols) {\r
                fb_w = 256;\r
                fb_left = fb_right = 32;\r
@@ -353,6 +350,8 @@ void emu_video_mode_change(int start_line, int line_count, int is_32cols)
        vout_fbdev_clear(layer_fb);\r
        vout_fbdev_resize(layer_fb, fb_w, fb_h, 16, fb_left, fb_right, fb_top, fb_bottom, 3);\r
        plat_video_flip();\r
+\r
+       PicoDrawSetOutFormat(PDF_RGB555, 0);\r
 }\r
 \r
 void plat_video_loop_prepare(void)\r