sms, fix drawing for new scaling code
authorkub <derkub@gmail.com>
Sun, 12 Sep 2021 08:02:01 +0000 (10:02 +0200)
committerkub <derkub@gmail.com>
Sun, 12 Sep 2021 08:02:01 +0000 (10:02 +0200)
pico/mode4.c
platform/linux/emu.c

index 76cbfab..6711feb 100644 (file)
@@ -14,6 +14,7 @@
  * - doubled sprites
  */
 #include "pico_int.h"
+#include <platform/common/upscale.h>
 
 static void (*FinalizeLineM4)(int line);
 static int skip_next_line;
@@ -272,9 +273,10 @@ static void DrawDisplayM4(int scanline)
   }
 }
 
+static void FinalizeLineRGB555M4(int line);
 void PicoFrameStartMode4(void)
 {
-  int lines = 192;
+  int lines = 192, coffs;
   skip_next_line = 0;
   screen_offset = 24;
   Pico.est.rendstatus = PDRAW_32_COLS;
@@ -289,9 +291,13 @@ void PicoFrameStartMode4(void)
       lines = 224;
     }
   }
+  line_offset = PicoIn.opt & (POPT_DIS_32C_BORDER|POPT_EN_SOFTSCALE) ? 0 : 32;
+  coffs = line_offset;
+  if (FinalizeLineM4 == FinalizeLineRGB555M4)
+    line_offset = 0 /* done in FinalizeLine */;
 
   if (Pico.est.rendstatus != rendstatus_old || lines != rendlines) {
-    emu_video_mode_change(screen_offset, lines, line_offset, 256);
+    emu_video_mode_change(screen_offset, lines, coffs, 256);
     rendstatus_old = Pico.est.rendstatus;
     rendlines = lines;
   }
@@ -352,8 +358,6 @@ void PicoDoHighPal555M4(void)
   Pico.est.HighPal[0xe0] = 0;
 }
 
-#include <platform/common/upscale.h>
-
 static void FinalizeLineRGB555M4(int line)
 {
   if (Pico.m.dirtyPal)
@@ -379,15 +383,14 @@ static void FinalizeLine8bitM4(int line)
 
 void PicoDrawSetOutputMode4(pdso_t which)
 {
-  line_offset = PicoIn.opt & (POPT_DIS_32C_BORDER|POPT_EN_SOFTSCALE) ? 0 : 32;
   switch (which)
   {
     case PDF_8BIT:   FinalizeLineM4 = FinalizeLine8bitM4; break;
-    case PDF_RGB555: FinalizeLineM4 = FinalizeLineRGB555M4;
-                     line_offset = 0 /* done in FinalizeLine */; break;
+    case PDF_RGB555: FinalizeLineM4 = FinalizeLineRGB555M4; break;
     default:         FinalizeLineM4 = NULL;
                      PicoDrawSetInternalBuf(Pico.est.Draw2FB, 328); break;
   }
+  rendstatus_old = -1;
 }
 
 // vim:shiftwidth=2:ts=2:expandtab
index 5cfea5d..36898e6 100644 (file)
@@ -172,6 +172,7 @@ void plat_video_set_buffer(void *buf)
 static void apply_renderer(void)\r
 {\r
        PicoIn.opt &= ~(POPT_ALT_RENDERER|POPT_EN_SOFTSCALE|POPT_DIS_32C_BORDER);\r
+\r
        switch (get_renderer()) {\r
        case RT_16BIT:\r
                // 32X uses line mode for vscaling with accurate renderer, since\r
@@ -195,7 +196,7 @@ static void apply_renderer(void)
 \r
        if (PicoIn.AHW & PAHW_32X)\r
                PicoDrawSetOutBuf(screen_buffer(g_screen_ptr), g_screen_ppitch * 2);\r
-       else if (is_16bit_mode()) {\r
+       if (is_16bit_mode()) {\r
                if (currentConfig.scaling == EOPT_SCALE_SW) {\r
                        PicoIn.opt |= POPT_EN_SOFTSCALE;\r
                        PicoIn.filter = currentConfig.filter;\r
@@ -325,7 +326,6 @@ void emu_video_mode_change(int start_line, int line_count, int start_col, int co
        screen_w = g_screen_width,  screen_x = (screen_w - out_w)/2;\r
        screen_h = g_screen_height, screen_y = (screen_h - out_h)/2;\r
 \r
-\r
        switch (currentConfig.scaling) {\r
        case EOPT_SCALE_HW:\r
                screen_w = out_w;\r