add aspect_ratio_mode_t, fix starting with "high" with non-native aspect ratio

This commit is contained in:
Roman Fomin 2023-12-17 15:37:28 +07:00
parent 8d2c454670
commit ba70ba460c
3 changed files with 33 additions and 38 deletions

View File

@ -54,7 +54,7 @@ boolean uncapped, default_uncapped; // [FG] uncapped rendering frame rate
int fpslimit; // when uncapped, limit framerate to this value
boolean fullscreen;
boolean exclusive_fullscreen;
int widescreen; // widescreen mode
aspect_ratio_mode_t widescreen, default_widescreen; // widescreen mode
boolean vga_porch_flash; // emulate VGA "porch" behaviour
boolean smooth_scaling;
@ -975,18 +975,19 @@ static void ResetResolution(int height)
{
int w, h;
if (height > native_height_adjusted)
{
return;
}
actualheight = use_aspect ? (int)(height * 1.2) : height;
video.height = height;
if (widescreen)
{
switch(widescreen)
switch (widescreen)
{
case RATIO_ORIG:
w = 4;
h = 3;
break;
case RATIO_MATCH_SCREEN:
w = native_width;
h = native_height;
break;
case RATIO_16_10:
w = 16;
h = 10;
@ -1000,16 +1001,10 @@ static void ResetResolution(int height)
h = 9;
break;
default:
w = native_width;
h = native_height;
w = 16;
h = 9;
break;
}
}
else
{
w = 4;
h = 3;
}
double aspect_ratio = (double)w / (double)h;
@ -1432,16 +1427,15 @@ static void CreateSurfaces(void)
SDL_TEXTUREACCESS_STREAMING,
w, h);
int oldwidescreen = widescreen;
widescreen = RATIO_MATCH_SCREEN;
ResetResolution(h);
R_InitAnyRes();
ST_InitRes();
widescreen = oldwidescreen;
widescreen = default_widescreen;
if (resolution_mode != RES_DRS)
if (resolution_mode != RES_DRS || widescreen != RATIO_MATCH_SCREEN)
{
ResetResolution(CurrentResolutionMode());
}
@ -1484,6 +1478,7 @@ static void I_ReinitGraphicsMode(void)
void I_ResetScreen(void)
{
resolution_mode = default_resolution_mode;
widescreen = default_widescreen;
ResetResolution(CurrentResolutionMode());
ResetLogicalSize();

View File

@ -24,7 +24,7 @@
#include "doomtype.h"
enum
typedef enum
{
RATIO_ORIG,
RATIO_MATCH_SCREEN,
@ -32,7 +32,7 @@ enum
RATIO_16_9,
RATIO_21_9,
NUM_RATIOS
};
} aspect_ratio_mode_t;
typedef enum
{
@ -76,7 +76,7 @@ extern boolean exclusive_fullscreen;
extern int fpslimit; // when uncapped, limit framerate to this value
extern int fps;
extern boolean vga_porch_flash; // emulate VGA "porch" behaviour
extern int widescreen; // widescreen mode
extern aspect_ratio_mode_t widescreen, default_widescreen; // widescreen mode
extern int video_display; // display index
extern boolean screenvisible;
extern boolean window_focused;

View File

@ -186,7 +186,7 @@ default_t defaults[] = {
// widescreen mode
{
"widescreen",
(config_t *) &widescreen, NULL,
(config_t *) &default_widescreen, NULL,
{RATIO_MATCH_SCREEN}, {RATIO_ORIG, NUM_RATIOS-1}, number, ss_none, wad_no,
"widescreen mode (0 = disable, 1 = match screen, 2 = 16:10, 3 = 16:9, 4 = 21:9)"
},