psp, revisit scaling

This commit is contained in:
kub 2023-11-30 20:35:49 +01:00
parent 4b24b6b74c
commit fc07fe2b4e
3 changed files with 21 additions and 19 deletions

View file

@ -41,12 +41,12 @@ enum {
EOPT_SCALE_SW = 1, EOPT_SCALE_SW = 1,
EOPT_SCALE_HW, EOPT_SCALE_HW,
// PSP horiz: // PSP horiz:
EOPT_SCALE_43 = 1, // DAR 4:3 (12:9) EOPT_SCALE_43 = 1, // 4:3 screen
EOPT_SCALE_WIDE, // DAR 14:9 EOPT_SCALE_STRETCH, // stretched to between _43 and _WIDE
EOPT_SCALE_FULL, // DAR 16:9 EOPT_SCALE_WIDE, // stretched to match display width
// PSP vert: // PSP vert:
EOPT_VSCALE_43 = 1, // DAR 4:3 EOPT_VSCALE_FULL = 1, // TV height scaled to screen height
EOPT_VSCALE_FULL, // zoomed to full height EOPT_VSCALE_NOBORDER, // VDP area scaled to screen height
}; };
enum { enum {

View file

@ -608,7 +608,7 @@ void pemu_prep_defconfig(void)
defaultConfig.CPUclock = 333; defaultConfig.CPUclock = 333;
defaultConfig.filter = EOPT_FILTER_BILINEAR; // bilinear filtering defaultConfig.filter = EOPT_FILTER_BILINEAR; // bilinear filtering
defaultConfig.scaling = EOPT_SCALE_43; defaultConfig.scaling = EOPT_SCALE_43;
defaultConfig.vscaling = EOPT_VSCALE_43; defaultConfig.vscaling = EOPT_VSCALE_FULL;
defaultConfig.renderer = RT_8BIT_ACC; defaultConfig.renderer = RT_8BIT_ACC;
defaultConfig.renderer32x = RT_8BIT_ACC; defaultConfig.renderer32x = RT_8BIT_ACC;
defaultConfig.EmuOpt |= EOPT_SHOW_RTC; defaultConfig.EmuOpt |= EOPT_SHOW_RTC;
@ -696,6 +696,9 @@ void plat_update_volume(int has_changed, int is_up)
/* prepare for MD screen mode change */ /* prepare for MD screen mode change */
void emu_video_mode_change(int start_line, int line_count, int start_col, int col_count) void emu_video_mode_change(int start_line, int line_count, int start_col, int col_count)
{ {
int h43 = (col_count >= 192 ? 320 : col_count); // ugh, mind GG...
int v43 = (line_count >= 192 ? Pico.m.pal ? 240 : 224 : line_count);
out_y = start_line; out_x = start_col; out_y = start_line; out_x = start_col;
out_h = line_count; out_w = col_count; out_h = line_count; out_w = col_count;
@ -703,31 +706,30 @@ void emu_video_mode_change(int start_line, int line_count, int start_col, int co
col_count = 256; col_count = 256;
switch (currentConfig.vscaling) { switch (currentConfig.vscaling) {
case EOPT_VSCALE_43: case EOPT_VSCALE_FULL:
// ugh, mind GG... line_count = v43;
if (line_count >= 160)
line_count = (Pico.m.pal ? 240 : 224);
vscale = (float)270/line_count; vscale = (float)270/line_count;
break; break;
case EOPT_VSCALE_FULL: case EOPT_VSCALE_NOBORDER:
vscale = (float)270/line_count; vscale = (float)270/line_count;
break; break;
default: default:
vscale = 1; vscale = 1;
break; break;
} }
switch (currentConfig.scaling) { switch (currentConfig.scaling) {
case EOPT_SCALE_43: case EOPT_SCALE_43:
hscale = (float)360/col_count; hscale = (vscale*h43)/col_count;
break;
case EOPT_SCALE_STRETCH:
hscale = (vscale*h43/2 + 480/2)/col_count;
break; break;
case EOPT_SCALE_WIDE: case EOPT_SCALE_WIDE:
hscale = (float)420/col_count;
break;
case EOPT_SCALE_FULL:
hscale = (float)480/col_count; hscale = (float)480/col_count;
break; break;
default: default:
hscale = 1; hscale = vscale;
break; break;
} }

View file

@ -1,11 +1,11 @@
static const char *men_hscaling_opts[] = { "OFF", "4:3", "wide", "fullscreen", NULL }; static const char *men_vscaling_opts[] = { "OFF", "fullscreen", "borderless", NULL };
static const char *men_vscaling_opts[] = { "OFF", "4:3", "fullscreen", NULL }; static const char *men_hscaling_opts[] = { "1:1", "4:3", "extended", "fullwidth", NULL };
static const char *men_filter_opts[] = { "nearest", "bilinear", NULL }; static const char *men_filter_opts[] = { "nearest", "bilinear", NULL };
#define MENU_OPTIONS_GFX \ #define MENU_OPTIONS_GFX \
mee_enum ("Horizontal scaling", MA_OPT_SCALING, currentConfig.scaling, men_hscaling_opts), \
mee_enum ("Vertical scaling", MA_OPT_VSCALING, currentConfig.vscaling, men_vscaling_opts), \ mee_enum ("Vertical scaling", MA_OPT_VSCALING, currentConfig.vscaling, men_vscaling_opts), \
mee_enum ("Aspect ratio", MA_OPT_SCALING, currentConfig.scaling, men_hscaling_opts), \
mee_enum ("Scaler type", MA_OPT3_FILTERING, currentConfig.filter, men_filter_opts), \ mee_enum ("Scaler type", MA_OPT3_FILTERING, currentConfig.filter, men_filter_opts), \
mee_range ("Gamma adjustment", MA_OPT3_GAMMAA, currentConfig.gamma, -4, 16), \ mee_range ("Gamma adjustment", MA_OPT3_GAMMAA, currentConfig.gamma, -4, 16), \
mee_range ("Black level", MA_OPT3_BLACKLVL, currentConfig.gamma2, 0, 2), \ mee_range ("Black level", MA_OPT3_BLACKLVL, currentConfig.gamma2, 0, 2), \