Преглед на файлове

vdp rendering, fix fast-forward graphics

kub преди 3 години
родител
ревизия
3031ff347a
променени са 2 файла, в които са добавени 5 реда и са изтрити 1 реда
  1. 4 1
      pico/draw.c
  2. 1 0
      pico/pico.h

+ 4 - 1
pico/draw.c

@@ -1794,6 +1794,7 @@ PICO_INTERNAL void PicoFrameStart(void)
   int offs = 8, lines = 224;
   int dirty = ((Pico.est.rendstatus & PDRAW_SONIC_MODE) || Pico.m.dirtyPal);
   int sprep = Pico.est.rendstatus & (PDRAW_SPRITES_MOVED|PDRAW_DIRTY_SPRITES);
+  int skipped = Pico.est.rendstatus & PDRAW_SKIP_FRAME;
 
   // prepare to do this frame
   Pico.est.rendstatus = 0;
@@ -1813,7 +1814,9 @@ PICO_INTERNAL void PicoFrameStart(void)
       lines, (Pico.video.reg[12] & 1) ? 0 : 1);
     rendstatus_old = Pico.est.rendstatus;
   }
-  if (sprep)
+  if (PicoIn.skipFrame) // preserve this until something is rendered at last
+    Pico.est.rendstatus |= PDRAW_SKIP_FRAME;
+  if (sprep | skipped)
     Pico.est.rendstatus |= PDRAW_PARSE_SPRITES;
 
   Pico.est.HighCol = HighColBase + offs * HighColIncrement;

+ 1 - 0
pico/pico.h

@@ -208,6 +208,7 @@ void PicoDoHighPal555(int sh, int line, struct PicoEState *est);
 #define PDRAW_SHHI_DONE     (1<<7) // layer sh/hi already processed
 #define PDRAW_32_COLS       (1<<8) // 32 column mode
 #define PDRAW_BORDER_32     (1<<9) // center H32 in buffer (32 px border)
+#define PDRAW_SKIP_FRAME   (1<<10) // frame is skipped
 extern int rendstatus_old;
 extern int rendlines;