From cb81303ded162fdbc12a9980fc2b6224dd7d56db Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 28 Sep 2025 18:30:55 +0500 Subject: [PATCH] engine: replace hardcoded pvs radius value by a r_pvs_radius cvar --- engine/client/ref_common.c | 2 ++ engine/common/mod_local.h | 1 - engine/ref_api.h | 1 + ref/gl/gl_rsurf.c | 5 +++-- ref/soft/r_main.c | 2 +- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/engine/client/ref_common.c b/engine/client/ref_common.c index 2c7b0472..f6efe961 100644 --- a/engine/client/ref_common.c +++ b/engine/client/ref_common.c @@ -19,6 +19,7 @@ CVAR_DEFINE_AUTO( gl_clear, "0", FCVAR_ARCHIVE, "clearing screen after each fram CVAR_DEFINE_AUTO( r_showtree, "0", FCVAR_ARCHIVE, "build the graph of visible BSP tree" ); static CVAR_DEFINE_AUTO( r_refdll, "", FCVAR_RENDERINFO, "choose renderer implementation, if supported" ); static CVAR_DEFINE_AUTO( r_refdll_loaded, "", FCVAR_READ_ONLY, "currently loaded renderer" ); +static CVAR_DEFINE_AUTO( r_pvs_radius, "2.0", FCVAR_ARCHIVE, "increase amount of potentially visible leaves by this radius" ); // there is no need to expose whole host and cl structs into the renderer // but we still need to update timings accurately as possible @@ -690,6 +691,7 @@ qboolean R_Init( void ) Cvar_RegisterVariable( &r_showtree ); Cvar_RegisterVariable( &r_refdll ); Cvar_RegisterVariable( &r_refdll_loaded ); + Cvar_RegisterVariable( &r_pvs_radius ); // cvars that are expected to exist Cvar_Get( "r_speeds", "0", FCVAR_ARCHIVE, "shows renderer speeds" ); diff --git a/engine/common/mod_local.h b/engine/common/mod_local.h index 1d3ec47d..7dc1e989 100644 --- a/engine/common/mod_local.h +++ b/engine/common/mod_local.h @@ -31,7 +31,6 @@ GNU General Public License for more details. #define SETVISBIT( vis, b )( void ) ((b) >= 0 ? (byte)((vis)[(b) >> 3] |= (1 << ((b) & 7))) : (byte)false ) #define CLEARVISBIT( vis, b )( void ) ((b) >= 0 ? (byte)((vis)[(b) >> 3] &= ~(1 << ((b) & 7))) : (byte)false ) -#define REFPVS_RADIUS 2.0f // radius for rendering #define FATPVS_RADIUS 8.0f // FatPVS use radius smaller than the FatPHS #define FATPHS_RADIUS 8.0f // see SV_AddToFatPAS in GoldSrc diff --git a/engine/ref_api.h b/engine/ref_api.h index 4c6610d2..c6adf2b3 100644 --- a/engine/ref_api.h +++ b/engine/ref_api.h @@ -701,6 +701,7 @@ typedef int (*REFAPI)( int version, ref_interface_t *pFunctionTable, ref_api_t* ENGINE_SHARED_CVAR( f, r_drawviewmodel ) \ ENGINE_SHARED_CVAR( f, r_glowshellfreq ) \ ENGINE_SHARED_CVAR( f, host_allow_materials ) \ + ENGINE_SHARED_CVAR( f, r_pvs_radius ) \ #define DECLARE_ENGINE_SHARED_CVAR_LIST() \ ENGINE_SHARED_CVAR_LIST( DECLARE_ENGINE_SHARED_CVAR ) diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c index 7f3991c7..3b0be46e 100644 --- a/ref/gl/gl_rsurf.c +++ b/ref/gl/gl_rsurf.c @@ -3739,8 +3739,9 @@ void R_MarkLeaves( void ) if( r_novis.value || RI.drawOrtho || !RI.viewleaf || !WORLDMODEL->visdata ) novis = true; - gEngfuncs.R_FatPVS( RI.pvsorigin, REFPVS_RADIUS, RI.visbytes, FBitSet( RI.params, RP_OLDVIEWLEAF ), novis ); - if( force && !novis ) gEngfuncs.R_FatPVS( test, REFPVS_RADIUS, RI.visbytes, true, novis ); + gEngfuncs.R_FatPVS( RI.pvsorigin, r_pvs_radius->value, RI.visbytes, FBitSet( RI.params, RP_OLDVIEWLEAF ), novis ); + if( force && !novis ) + gEngfuncs.R_FatPVS( test, r_pvs_radius->value, RI.visbytes, true, novis ); for( i = 0; i < WORLDMODEL->numleafs; i++ ) { diff --git a/ref/soft/r_main.c b/ref/soft/r_main.c index 34592885..5b768bdf 100644 --- a/ref/soft/r_main.c +++ b/ref/soft/r_main.c @@ -1156,7 +1156,7 @@ static void R_MarkLeaves( void ) tr.visframecount++; r_oldviewcluster = r_viewcluster; - gEngfuncs.R_FatPVS( RI.pvsorigin, REFPVS_RADIUS, RI.visbytes, FBitSet( RI.params, RP_OLDVIEWLEAF ), false ); + gEngfuncs.R_FatPVS( RI.pvsorigin, r_pvs_radius->value, RI.visbytes, FBitSet( RI.params, RP_OLDVIEWLEAF ), false ); vis = RI.visbytes; for( i = 0; i < WORLDMODEL->numleafs; i++ )