From dbb49ae69f784a2265a40d5aa4e48d37dc0edfdc Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Sun, 30 May 2021 02:11:59 +0200 Subject: [PATCH 1/3] tr_sky: clear color buffer when fastsky is enabled It only clears color buffer and does not clear other buffers if r_fastsky is enabled for performance and r_clear is disabled to workaround Nvidia issue described in #472 --- src/engine/renderer/tr_backend.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/renderer/tr_backend.cpp b/src/engine/renderer/tr_backend.cpp index 39665b4ef4..ab4578a5d5 100644 --- a/src/engine/renderer/tr_backend.cpp +++ b/src/engine/renderer/tr_backend.cpp @@ -5622,8 +5622,8 @@ const RenderCommand *ClearBufferCommand::ExecuteSelf( ) const // ensures that depth writes are enabled for the depth clear GL_State( GLS_DEFAULT ); - // clear relevant buffers - if ( r_clear->integer ) { + // Clear relevant buffers, r_fastsky always require clearing. + if ( r_clear->integer || r_fastsky->integer ) { clearBits |= GL_COLOR_BUFFER_BIT; } From 0cdc45ba7dcda7a06ab189e45366a50325a9d722 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Mon, 29 Jul 2024 18:06:22 +0200 Subject: [PATCH 2/3] renderer: port r_clear cvar to new format and disable it by default --- src/engine/renderer/tr_backend.cpp | 4 +++- src/engine/renderer/tr_init.cpp | 2 -- src/engine/renderer/tr_local.h | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/engine/renderer/tr_backend.cpp b/src/engine/renderer/tr_backend.cpp index ab4578a5d5..79b8ea8b0b 100644 --- a/src/engine/renderer/tr_backend.cpp +++ b/src/engine/renderer/tr_backend.cpp @@ -33,6 +33,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA backEndData_t *backEndData[ SMP_FRAMES ]; backEndState_t backEnd; +static Cvar::Cvar r_clear( "r_clear", "Clear screen before painting over it on every frame", Cvar::NONE, false ); + void GL_Bind( image_t *image ) { int texnum; @@ -5623,7 +5625,7 @@ const RenderCommand *ClearBufferCommand::ExecuteSelf( ) const GL_State( GLS_DEFAULT ); // Clear relevant buffers, r_fastsky always require clearing. - if ( r_clear->integer || r_fastsky->integer ) { + if ( r_clear.Get() || r_fastsky->integer ) { clearBits |= GL_COLOR_BUFFER_BIT; } diff --git a/src/engine/renderer/tr_init.cpp b/src/engine/renderer/tr_init.cpp index b5a733b93f..83005b173f 100644 --- a/src/engine/renderer/tr_init.cpp +++ b/src/engine/renderer/tr_init.cpp @@ -138,7 +138,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA cvar_t *r_ignoreMaterialMaxDimension; cvar_t *r_replaceMaterialMinDimensionIfPresentWithMaxDimension; cvar_t *r_finish; - cvar_t *r_clear; cvar_t *r_textureMode; cvar_t *r_offsetFactor; cvar_t *r_offsetUnits; @@ -1183,7 +1182,6 @@ ScreenshotCmd screenshotPNGRegistration("screenshotPNG", ssFormat_t::SSF_PNG, "p r_logFile = Cvar_Get( "r_logFile", "0", CVAR_CHEAT ); r_debugSurface = Cvar_Get( "r_debugSurface", "0", CVAR_CHEAT ); r_nobind = Cvar_Get( "r_nobind", "0", CVAR_CHEAT ); - r_clear = Cvar_Get( "r_clear", "1", 0 ); r_offsetFactor = Cvar_Get( "r_offsetFactor", "-1", CVAR_CHEAT ); r_offsetUnits = Cvar_Get( "r_offsetUnits", "-2", CVAR_CHEAT ); diff --git a/src/engine/renderer/tr_local.h b/src/engine/renderer/tr_local.h index 388f51f3d6..4ef11c8ee7 100644 --- a/src/engine/renderer/tr_local.h +++ b/src/engine/renderer/tr_local.h @@ -2932,8 +2932,6 @@ enum class dynamicLightRenderer_t { LEGACY, TILED }; extern cvar_t *r_logFile; // number of frames to emit GL logs - extern cvar_t *r_clear; // force screen clear every frame - extern Cvar::Range> r_shadows; extern cvar_t *r_softShadows; extern cvar_t *r_softShadowsPP; From de4e6e94cc6a6fae4f5c75b17c4d00413702e027 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Mon, 29 Jul 2024 18:10:11 +0200 Subject: [PATCH 3/3] renderer: port r_fastsky cvar to new format --- src/engine/renderer/tr_backend.cpp | 3 ++- src/engine/renderer/tr_init.cpp | 3 --- src/engine/renderer/tr_local.h | 2 +- src/engine/renderer/tr_sky.cpp | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/engine/renderer/tr_backend.cpp b/src/engine/renderer/tr_backend.cpp index 79b8ea8b0b..1fa59a3f9c 100644 --- a/src/engine/renderer/tr_backend.cpp +++ b/src/engine/renderer/tr_backend.cpp @@ -34,6 +34,7 @@ backEndData_t *backEndData[ SMP_FRAMES ]; backEndState_t backEnd; static Cvar::Cvar r_clear( "r_clear", "Clear screen before painting over it on every frame", Cvar::NONE, false ); +Cvar::Cvar r_fastsky( "r_fastsky", "Clear sky instead of drawing it", Cvar::NONE, false ); void GL_Bind( image_t *image ) { @@ -5625,7 +5626,7 @@ const RenderCommand *ClearBufferCommand::ExecuteSelf( ) const GL_State( GLS_DEFAULT ); // Clear relevant buffers, r_fastsky always require clearing. - if ( r_clear.Get() || r_fastsky->integer ) { + if ( r_clear.Get() || r_fastsky.Get() ) { clearBits |= GL_COLOR_BUFFER_BIT; } diff --git a/src/engine/renderer/tr_init.cpp b/src/engine/renderer/tr_init.cpp index 83005b173f..053542b667 100644 --- a/src/engine/renderer/tr_init.cpp +++ b/src/engine/renderer/tr_init.cpp @@ -53,8 +53,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA cvar_t *r_measureOverdraw; - cvar_t *r_fastsky; - cvar_t *r_lodBias; cvar_t *r_lodScale; @@ -1117,7 +1115,6 @@ ScreenshotCmd screenshotPNGRegistration("screenshotPNG", ssFormat_t::SSF_PNG, "p r_znear = Cvar_Get( "r_znear", "3", CVAR_CHEAT ); r_zfar = Cvar_Get( "r_zfar", "0", CVAR_CHEAT ); r_checkGLErrors = Cvar_Get( "r_checkGLErrors", "-1", 0 ); - r_fastsky = Cvar_Get( "r_fastsky", "0", CVAR_ARCHIVE ); r_finish = Cvar_Get( "r_finish", "0", CVAR_CHEAT ); r_textureMode = Cvar_Get( "r_textureMode", "GL_LINEAR_MIPMAP_LINEAR", CVAR_ARCHIVE ); r_gamma = Cvar_Get( "r_gamma", "1.0", CVAR_ARCHIVE ); diff --git a/src/engine/renderer/tr_local.h b/src/engine/renderer/tr_local.h index 4ef11c8ee7..4dcbaa2539 100644 --- a/src/engine/renderer/tr_local.h +++ b/src/engine/renderer/tr_local.h @@ -2864,7 +2864,7 @@ enum class dynamicLightRenderer_t { LEGACY, TILED }; extern cvar_t *r_ambientScale; extern cvar_t *r_lightScale; - extern cvar_t *r_fastsky; // controls whether sky should be cleared or drawn + extern Cvar::Cvar r_fastsky; // Controls whether sky should be cleared or drawn. extern Cvar::Range> r_dynamicLightRenderer; extern Cvar::Cvar r_dynamicLight; extern Cvar::Cvar r_staticLight; diff --git a/src/engine/renderer/tr_sky.cpp b/src/engine/renderer/tr_sky.cpp index b98a05cbfb..cf07733e40 100644 --- a/src/engine/renderer/tr_sky.cpp +++ b/src/engine/renderer/tr_sky.cpp @@ -49,7 +49,7 @@ void Tess_StageIteratorSky() tr.drawingSky = false; - if ( r_fastsky->integer ) + if ( r_fastsky.Get() ) { return; }