sms, fix drawing for new scaling code

This commit is contained in:
kub 2021-09-12 10:02:01 +02:00
parent ce79590af3
commit d1ae0810df
2 changed files with 12 additions and 9 deletions

View file

@ -14,6 +14,7 @@
* - doubled sprites * - doubled sprites
*/ */
#include "pico_int.h" #include "pico_int.h"
#include <platform/common/upscale.h>
static void (*FinalizeLineM4)(int line); static void (*FinalizeLineM4)(int line);
static int skip_next_line; static int skip_next_line;
@ -272,9 +273,10 @@ static void DrawDisplayM4(int scanline)
} }
} }
static void FinalizeLineRGB555M4(int line);
void PicoFrameStartMode4(void) void PicoFrameStartMode4(void)
{ {
int lines = 192; int lines = 192, coffs;
skip_next_line = 0; skip_next_line = 0;
screen_offset = 24; screen_offset = 24;
Pico.est.rendstatus = PDRAW_32_COLS; Pico.est.rendstatus = PDRAW_32_COLS;
@ -289,9 +291,13 @@ void PicoFrameStartMode4(void)
lines = 224; 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) { 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; rendstatus_old = Pico.est.rendstatus;
rendlines = lines; rendlines = lines;
} }
@ -352,8 +358,6 @@ void PicoDoHighPal555M4(void)
Pico.est.HighPal[0xe0] = 0; Pico.est.HighPal[0xe0] = 0;
} }
#include <platform/common/upscale.h>
static void FinalizeLineRGB555M4(int line) static void FinalizeLineRGB555M4(int line)
{ {
if (Pico.m.dirtyPal) if (Pico.m.dirtyPal)
@ -379,15 +383,14 @@ static void FinalizeLine8bitM4(int line)
void PicoDrawSetOutputMode4(pdso_t which) void PicoDrawSetOutputMode4(pdso_t which)
{ {
line_offset = PicoIn.opt & (POPT_DIS_32C_BORDER|POPT_EN_SOFTSCALE) ? 0 : 32;
switch (which) switch (which)
{ {
case PDF_8BIT: FinalizeLineM4 = FinalizeLine8bitM4; break; case PDF_8BIT: FinalizeLineM4 = FinalizeLine8bitM4; break;
case PDF_RGB555: FinalizeLineM4 = FinalizeLineRGB555M4; case PDF_RGB555: FinalizeLineM4 = FinalizeLineRGB555M4; break;
line_offset = 0 /* done in FinalizeLine */; break;
default: FinalizeLineM4 = NULL; default: FinalizeLineM4 = NULL;
PicoDrawSetInternalBuf(Pico.est.Draw2FB, 328); break; PicoDrawSetInternalBuf(Pico.est.Draw2FB, 328); break;
} }
rendstatus_old = -1;
} }
// vim:shiftwidth=2:ts=2:expandtab // vim:shiftwidth=2:ts=2:expandtab

View file

@ -172,6 +172,7 @@ void plat_video_set_buffer(void *buf)
static void apply_renderer(void) static void apply_renderer(void)
{ {
PicoIn.opt &= ~(POPT_ALT_RENDERER|POPT_EN_SOFTSCALE|POPT_DIS_32C_BORDER); PicoIn.opt &= ~(POPT_ALT_RENDERER|POPT_EN_SOFTSCALE|POPT_DIS_32C_BORDER);
switch (get_renderer()) { switch (get_renderer()) {
case RT_16BIT: case RT_16BIT:
// 32X uses line mode for vscaling with accurate renderer, since // 32X uses line mode for vscaling with accurate renderer, since
@ -195,7 +196,7 @@ static void apply_renderer(void)
if (PicoIn.AHW & PAHW_32X) if (PicoIn.AHW & PAHW_32X)
PicoDrawSetOutBuf(screen_buffer(g_screen_ptr), g_screen_ppitch * 2); PicoDrawSetOutBuf(screen_buffer(g_screen_ptr), g_screen_ppitch * 2);
else if (is_16bit_mode()) { if (is_16bit_mode()) {
if (currentConfig.scaling == EOPT_SCALE_SW) { if (currentConfig.scaling == EOPT_SCALE_SW) {
PicoIn.opt |= POPT_EN_SOFTSCALE; PicoIn.opt |= POPT_EN_SOFTSCALE;
PicoIn.filter = currentConfig.filter; PicoIn.filter = currentConfig.filter;
@ -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; screen_w = g_screen_width, screen_x = (screen_w - out_w)/2;
screen_h = g_screen_height, screen_y = (screen_h - out_h)/2; screen_h = g_screen_height, screen_y = (screen_h - out_h)/2;
switch (currentConfig.scaling) { switch (currentConfig.scaling) {
case EOPT_SCALE_HW: case EOPT_SCALE_HW:
screen_w = out_w; screen_w = out_w;