Browse Source

vdp, add handling of external buffers for fast renderer

kub 3 years ago
parent
commit
207e5ba0ee
3 changed files with 17 additions and 6 deletions
  1. 7 5
      pico/draw.c
  2. 9 1
      pico/draw2.c
  3. 1 0
      pico/pico_int.h

+ 7 - 5
pico/draw.c

@@ -1855,9 +1855,6 @@ PICO_INTERNAL void PicoFrameStart(void)
     Pico.m.dirtyPal = (dirty ? 2 : 0); // mark as dirty but already copied
     blockcpy(Pico.est.SonicPal, PicoMem.cram, 0x40*2);
   }
-
-  if (PicoIn.opt & POPT_ALT_RENDERER)
-    return;
 }
 
 static void DrawBlankedLine(int line, int offs, int sh, int bgc)
@@ -1974,10 +1971,12 @@ void PicoDrawUpdateHighPal(void)
 void PicoDrawSetOutFormat(pdso_t which, int use_32x_line_mode)
 {
   PicoDrawSetInternalBuf(NULL, 0);
+  PicoDraw2SetOutBuf(NULL);
   switch (which)
   {
     case PDF_8BIT:
       FinalizeLine = FinalizeLine8bit;
+      PicoDrawSetInternalBuf(Pico.est.Draw2FB, 328);
       break;
 
     case PDF_RGB555:
@@ -1989,13 +1988,13 @@ void PicoDrawSetOutFormat(pdso_t which, int use_32x_line_mode)
 
     default:
       FinalizeLine = NULL;
-      PicoDrawSetOutBufMD(Pico.est.Draw2FB+8, 328);
       break;
   }
   if (PicoIn.AHW & PAHW_32X)
     PicoDrawSetOutFormat32x(which, use_32x_line_mode);
   PicoDrawSetOutputMode4(which);
   rendstatus_old = -1;
+  Pico.m.dirtyPal = 1;
 }
 
 void PicoDrawSetOutBufMD(void *dest, int increment)
@@ -2004,7 +2003,10 @@ void PicoDrawSetOutBufMD(void *dest, int increment)
     // kludge for no-copy mode
     PicoDrawSetInternalBuf(dest, increment);
   }
-  if (dest != NULL) {
+
+  if (FinalizeLine == NULL)
+    PicoDraw2SetOutBuf(dest);
+  else if (dest != NULL) {
     DrawLineDestBase = dest;
     DrawLineDestIncrement = increment;
     Pico.est.DrawLineDest = (char *)DrawLineDestBase + Pico.est.DrawScanline * increment;

+ 9 - 1
pico/draw2.c

@@ -692,7 +692,15 @@ PICO_INTERNAL void PicoFrameFull()
 	pprof_end(draw);
 }
 
+void PicoDraw2SetOutBuf(void *dest)
+{
+	if (dest)
+		Pico.est.Draw2FB = dest;
+	else
+		Pico.est.Draw2FB = PicoDraw2FB_;
+}
+
 void PicoDraw2Init(void)
 {
-	Pico.est.Draw2FB = PicoDraw2FB_;
+	PicoDraw2SetOutBuf(NULL);
 }

+ 1 - 0
pico/pico_int.h

@@ -674,6 +674,7 @@ extern int DrawLineDestIncrement;
 extern unsigned int VdpSATCache[128];
 
 // draw2.c
+void PicoDraw2SetOutBuf(void *dest);
 void PicoDraw2Init(void);
 PICO_INTERNAL void PicoFrameFull();