accurate_sprites performance improvement, PSP is untested
[libpicofe.git] / gp2x / emu.c
index f580f84..5f4a0e2 100644 (file)
@@ -291,26 +291,39 @@ static void blit(const char *fps, const char *notice)
                // 8bit accurate renderer\r
                if (Pico.m.dirtyPal)\r
                {\r
+                       int pallen = 0x40;\r
                        Pico.m.dirtyPal = 0;\r
-                       if(Pico.video.reg[0xC]&8) { // shadow/hilight mode\r
+                       if (Pico.video.reg[0xC]&8) // shadow/hilight mode\r
+                       {\r
                                vidConvCpyRGB32(localPal, Pico.cram, 0x40);\r
                                vidConvCpyRGB32sh(localPal+0x40, Pico.cram, 0x40);\r
                                vidConvCpyRGB32hi(localPal+0x80, Pico.cram, 0x40);\r
                                memcpy32(localPal+0xc0, localPal+0x40, 0x40);\r
-                               localPal[0xc0] = 0x0000c000;\r
-                               localPal[0xd0] = 0x00c00000;\r
-                               localPal[0xe0] = 0x00000000; // reserved pixels for OSD\r
-                               localPal[0xf0] = 0x00ffffff;\r
-                               gp2x_video_setpalette(localPal, 0x100);\r
-                       } else if (rendstatus & PDRAW_SONIC_MODE) { // mid-frame palette changes\r
+                               pallen = 0x100;\r
+                       }\r
+                       else if (rendstatus & PDRAW_ACC_SPRITES) {\r
+                               vidConvCpyRGB32(localPal, Pico.cram, 0x40);\r
+                               memcpy32(localPal+0x40, localPal, 0x40);\r
+                               memcpy32(localPal+0x80, localPal, 0x40);\r
+                               memcpy32(localPal+0xc0, localPal, 0x40);\r
+                               pallen = 0x100;\r
+                       }\r
+                       else if (rendstatus & PDRAW_SONIC_MODE) { // mid-frame palette changes\r
                                vidConvCpyRGB32(localPal, Pico.cram, 0x40);\r
                                vidConvCpyRGB32(localPal+0x40, HighPal, 0x40);\r
                                vidConvCpyRGB32(localPal+0x80, HighPal+0x40, 0x40);\r
-                               gp2x_video_setpalette(localPal, 0xc0);\r
-                       } else {\r
+                               pallen = 0xc0;\r
+                       }\r
+                       else {\r
                                vidConvCpyRGB32(localPal, Pico.cram, 0x40);\r
-                               gp2x_video_setpalette(localPal, 0x40);\r
                        }\r
+                       if (pallen > 0xc0) {\r
+                               localPal[0xc0] = 0x0000c000;\r
+                               localPal[0xd0] = 0x00c00000;\r
+                               localPal[0xe0] = 0x00000000; // reserved pixels for OSD\r
+                               localPal[0xf0] = 0x00ffffff;\r
+                       }\r
+                       gp2x_video_setpalette(localPal, pallen);\r
                }\r
        }\r
 \r