vdp rendering, fix fast-forward graphics
authorkub <derkub@gmail.com>
Wed, 7 Oct 2020 18:08:22 +0000 (20:08 +0200)
committerkub <derkub@gmail.com>
Wed, 7 Oct 2020 18:08:22 +0000 (20:08 +0200)
pico/draw.c
pico/pico.h

index 582e35b..abffdfd 100644 (file)
@@ -1794,6 +1794,7 @@ PICO_INTERNAL void PicoFrameStart(void)
   int offs = 8, lines = 224;\r
   int dirty = ((Pico.est.rendstatus & PDRAW_SONIC_MODE) || Pico.m.dirtyPal);\r
   int sprep = Pico.est.rendstatus & (PDRAW_SPRITES_MOVED|PDRAW_DIRTY_SPRITES);\r
+  int skipped = Pico.est.rendstatus & PDRAW_SKIP_FRAME;\r
 \r
   // prepare to do this frame\r
   Pico.est.rendstatus = 0;\r
@@ -1813,7 +1814,9 @@ PICO_INTERNAL void PicoFrameStart(void)
       lines, (Pico.video.reg[12] & 1) ? 0 : 1);\r
     rendstatus_old = Pico.est.rendstatus;\r
   }\r
-  if (sprep)\r
+  if (PicoIn.skipFrame) // preserve this until something is rendered at last\r
+    Pico.est.rendstatus |= PDRAW_SKIP_FRAME;\r
+  if (sprep | skipped)\r
     Pico.est.rendstatus |= PDRAW_PARSE_SPRITES;\r
 \r
   Pico.est.HighCol = HighColBase + offs * HighColIncrement;\r
index 3c800f6..d04ff50 100644 (file)
@@ -208,6 +208,7 @@ void PicoDoHighPal555(int sh, int line, struct PicoEState *est);
 #define PDRAW_SHHI_DONE     (1<<7) // layer sh/hi already processed\r
 #define PDRAW_32_COLS       (1<<8) // 32 column mode\r
 #define PDRAW_BORDER_32     (1<<9) // center H32 in buffer (32 px border)\r
+#define PDRAW_SKIP_FRAME   (1<<10) // frame is skipped\r
 extern int rendstatus_old;\r
 extern int rendlines;\r
 \r