From 7d15cec27cd80546babe4a4ce38900279160c402 Mon Sep 17 00:00:00 2001 From: Ioan Chera Date: Sat, 16 May 2020 14:44:59 +0300 Subject: [PATCH] Add r_fullscreen 2 which means SDL_WINDOW_FULLSCREEN_DESKTOP --- neo/framework/Common.cpp | 4 ++-- neo/renderer/RenderSystem_init.cpp | 21 ++++++++++++++------- neo/renderer/tr_local.h | 2 +- neo/sys/events.cpp | 9 ++++++++- neo/sys/glimp.cpp | 4 +++- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/neo/framework/Common.cpp b/neo/framework/Common.cpp index 37648c90..cc2c152d 100644 --- a/neo/framework/Common.cpp +++ b/neo/framework/Common.cpp @@ -2813,8 +2813,8 @@ static bool checkForHelp(int argc, char **argv) WriteString("+set fs_game \n"); WriteString(" start the given addon/mod, e.g. +set fs_game d3xp\n"); #ifndef ID_DEDICATED - WriteString("+set r_fullscreen <0 or 1>\n"); - WriteString(" start game in windowed (0) or fullscreen (1) mode\n"); + WriteString("+set r_fullscreen <0, 1 or 2>\n"); + WriteString(" start game in windowed (0), fullscreen (1) or fullscreen-desktop (2) mode\n"); WriteString("+set r_mode \n"); WriteString(" start game in resolution belonging to ,\n"); WriteString(" use -1 for custom resolutions:\n"); diff --git a/neo/renderer/RenderSystem_init.cpp b/neo/renderer/RenderSystem_init.cpp index 818da194..a9951416 100644 --- a/neo/renderer/RenderSystem_init.cpp +++ b/neo/renderer/RenderSystem_init.cpp @@ -58,7 +58,7 @@ idCVar r_useLightPortalFlow( "r_useLightPortalFlow", "1", CVAR_RENDERER | CVAR_B idCVar r_multiSamples( "r_multiSamples", "0", CVAR_RENDERER | CVAR_ARCHIVE | CVAR_INTEGER, "number of antialiasing samples" ); idCVar r_mode( "r_mode", "5", CVAR_ARCHIVE | CVAR_RENDERER | CVAR_INTEGER, "video mode number" ); idCVar r_displayRefresh( "r_displayRefresh", "0", CVAR_RENDERER | CVAR_INTEGER | CVAR_NOCHEAT, "optional display refresh rate option for vid mode", 0.0f, 200.0f ); -idCVar r_fullscreen( "r_fullscreen", "0", CVAR_RENDERER | CVAR_ARCHIVE | CVAR_BOOL, "0 = windowed, 1 = full screen" ); +idCVar r_fullscreen( "r_fullscreen", "0", CVAR_RENDERER | CVAR_ARCHIVE | CVAR_INTEGER, "0 = windowed, 1 = full screen, 2 = full screen desktop" ); idCVar r_customWidth( "r_customWidth", "720", CVAR_RENDERER | CVAR_ARCHIVE | CVAR_INTEGER, "custom screen width. set r_mode to -1 to activate" ); idCVar r_customHeight( "r_customHeight", "486", CVAR_RENDERER | CVAR_ARCHIVE | CVAR_INTEGER, "custom screen height. set r_mode to -1 to activate" ); idCVar r_singleTriangle( "r_singleTriangle", "0", CVAR_RENDERER | CVAR_BOOL, "only draw a single triangle per primitive" ); @@ -656,7 +656,7 @@ void R_InitOpenGL( void ) { parms.width = glConfig.vidWidth; parms.height = glConfig.vidHeight; - parms.fullScreen = r_fullscreen.GetBool(); + parms.fullScreen = r_fullscreen.GetInteger(); parms.displayHz = r_displayRefresh.GetInteger(); parms.multiSamples = r_multiSamples.GetInteger(); parms.stereo = false; @@ -1798,7 +1798,8 @@ static void GfxInfo_f( const idCmdArgs &args ) { const char *fsstrings[] = { "windowed", - "fullscreen" + "fullscreen", + "fullscreen-desktop", }; common->Printf( "\nGL_VENDOR: %s\n", glConfig.vendor_string ); @@ -1810,7 +1811,13 @@ static void GfxInfo_f( const idCmdArgs &args ) { common->Printf( "GL_MAX_TEXTURE_COORDS_ARB: %d\n", glConfig.maxTextureCoords ); common->Printf( "GL_MAX_TEXTURE_IMAGE_UNITS_ARB: %d\n", glConfig.maxTextureImageUnits ); common->Printf( "\nPIXELFORMAT: color(%d-bits) Z(%d-bit) stencil(%d-bits)\n", glConfig.colorBits, glConfig.depthBits, glConfig.stencilBits ); - common->Printf( "MODE: %d, %d x %d %s hz:", r_mode.GetInteger(), glConfig.vidWidth, glConfig.vidHeight, fsstrings[r_fullscreen.GetBool()] ); + int fullscreen = r_fullscreen.GetInteger(); + if (fullscreen < 0) { + fullscreen = 0; + } else if (fullscreen > 2) { + fullscreen = 2; + } + common->Printf( "MODE: %d, %d x %d %s hz:", r_mode.GetInteger(), glConfig.vidWidth, glConfig.vidHeight, fsstrings[fullscreen] ); if ( glConfig.displayFrequency ) { common->Printf( "%d\n", glConfig.displayFrequency ); @@ -1909,12 +1916,12 @@ void R_VidRestart_f( const idCmdArgs &args ) { glConfig.isInitialized = false; // create the new context and vertex cache - bool latch = cvarSystem->GetCVarBool( "r_fullscreen" ); + int latch = cvarSystem->GetCVarInteger( "r_fullscreen" ); if ( forceWindow ) { cvarSystem->SetCVarBool( "r_fullscreen", false ); } R_InitOpenGL(); - cvarSystem->SetCVarBool( "r_fullscreen", latch ); + cvarSystem->SetCVarInteger( "r_fullscreen", latch ); // regenerate all images globalImages->ReloadAllImages(); @@ -1922,7 +1929,7 @@ void R_VidRestart_f( const idCmdArgs &args ) { glimpParms_t parms; parms.width = glConfig.vidWidth; parms.height = glConfig.vidHeight; - parms.fullScreen = ( forceWindow ) ? false : r_fullscreen.GetBool(); + parms.fullScreen = ( forceWindow ) ? 0 : r_fullscreen.GetInteger(); parms.displayHz = r_displayRefresh.GetInteger(); parms.multiSamples = r_multiSamples.GetInteger(); parms.stereo = false; diff --git a/neo/renderer/tr_local.h b/neo/renderer/tr_local.h index eca4bc87..77954e9f 100644 --- a/neo/renderer/tr_local.h +++ b/neo/renderer/tr_local.h @@ -1054,7 +1054,7 @@ IMPLEMENTATION SPECIFIC FUNCTIONS typedef struct { int width; int height; - bool fullScreen; + int fullScreen; bool stereo; int displayHz; int multiSamples; diff --git a/neo/sys/events.cpp b/neo/sys/events.cpp index 92b175df..328e727c 100644 --- a/neo/sys/events.cpp +++ b/neo/sys/events.cpp @@ -477,7 +477,14 @@ sysEvent_t Sys_GetEvent() { case SDL_KEYDOWN: if (ev.key.keysym.sym == SDLK_RETURN && (ev.key.keysym.mod & KMOD_ALT) > 0) { - cvarSystem->SetCVarBool("r_fullscreen", !renderSystem->IsFullScreen()); + static int prevFullScreen; + if (renderSystem->IsFullScreen()) { + prevFullScreen = cvarSystem->GetCVarInteger("r_fullscreen"); + cvarSystem->SetCVarInteger("r_fullscreen", 0); + } else { + cvarSystem->SetCVarInteger("r_fullscreen", prevFullScreen ? prevFullScreen : 1); + } + PushConsoleEvent("vid_restart"); return res_none; } diff --git a/neo/sys/glimp.cpp b/neo/sys/glimp.cpp index 91b1e065..46a84bad 100644 --- a/neo/sys/glimp.cpp +++ b/neo/sys/glimp.cpp @@ -97,8 +97,10 @@ bool GLimp_Init(glimpParms_t parms) { Uint32 flags = SDL_WINDOW_OPENGL; - if (parms.fullScreen) + if (parms.fullScreen == 1) flags |= SDL_WINDOW_FULLSCREEN; + else if (parms.fullScreen == 2) + flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; int colorbits = 24; int depthbits = 24;