From 3a57f26351079a2e5a090cd3b7ff5a7b4906b604 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sat, 20 May 2023 20:27:15 +0300 Subject: [PATCH] ref: gl: move ref_gl cvars to static allocation --- ref/gl/gl_cull.c | 2 +- ref/gl/gl_dbghulls.c | 5 +- ref/gl/gl_decals.c | 12 ++-- ref/gl/gl_frustum.c | 4 +- ref/gl/gl_image.c | 36 ++++++------ ref/gl/gl_local.h | 63 +++++++++----------- ref/gl/gl_opengl.c | 133 +++++++++++++++++++------------------------ ref/gl/gl_rlight.c | 6 +- ref/gl/gl_rmain.c | 14 ++--- ref/gl/gl_rmisc.c | 2 +- ref/gl/gl_rsurf.c | 54 +++++++++--------- ref/gl/gl_sprite.c | 2 +- ref/gl/gl_studio.c | 12 ++-- 13 files changed, 161 insertions(+), 184 deletions(-) diff --git a/ref/gl/gl_cull.c b/ref/gl/gl_cull.c index b13b9638..704e755d 100644 --- a/ref/gl/gl_cull.c +++ b/ref/gl/gl_cull.c @@ -73,7 +73,7 @@ int R_CullSurface( msurface_t *surf, gl_frustum_t *frustum, uint clipflags ) if( !surf || !surf->texinfo || !surf->texinfo->texture ) return CULL_OTHER; - if( r_nocull->value ) + if( r_nocull.value ) return CULL_VISIBLE; // world surfaces can be culled by vis frame too diff --git a/ref/gl/gl_dbghulls.c b/ref/gl/gl_dbghulls.c index d21cfae5..d9b76cd8 100644 --- a/ref/gl/gl_dbghulls.c +++ b/ref/gl/gl_dbghulls.c @@ -39,8 +39,9 @@ void R_DrawWorldHull( void ) ClearBits( r_showhull->flags, FCVAR_CHANGED ); } - if( !CVAR_TO_BOOL( r_showhull )) + if( !r_showhull->flags ) return; + pglDisable( GL_TEXTURE_2D ); list_for_each_entry( poly, &hull->polys, chain ) @@ -61,7 +62,7 @@ void R_DrawModelHull( void ) winding_t *poly; int i; - if( !CVAR_TO_BOOL( r_showhull )) + if( !r_showhull->flags ) return; if( !RI.currentmodel || RI.currentmodel->name[0] != '*' ) diff --git a/ref/gl/gl_decals.c b/ref/gl/gl_decals.c index 2356a7bf..e7f529bf 100644 --- a/ref/gl/gl_decals.c +++ b/ref/gl/gl_decals.c @@ -927,10 +927,10 @@ void DrawSurfaceDecals( msurface_t *fa, qboolean single, qboolean reverse ) if( e->curstate.rendermode == kRenderTransTexture || e->curstate.rendermode == kRenderTransAdd ) GL_Cull( GL_NONE ); - if( gl_polyoffset->value ) + if( gl_polyoffset.value ) { pglEnable( GL_POLYGON_OFFSET_FILL ); - pglPolygonOffset( -1.0f, -gl_polyoffset->value ); + pglPolygonOffset( -1.0f, -gl_polyoffset.value ); } } @@ -1020,7 +1020,7 @@ void DrawSurfaceDecals( msurface_t *fa, qboolean single, qboolean reverse ) pglEnable( GL_ALPHA_TEST ); } - if( gl_polyoffset->value ) + if( gl_polyoffset.value ) pglDisable( GL_POLYGON_OFFSET_FILL ); if( e->curstate.rendermode == kRenderTransTexture || e->curstate.rendermode == kRenderTransAdd ) @@ -1058,10 +1058,10 @@ void DrawDecalsBatch( void ) if( e->curstate.rendermode == kRenderTransTexture || e->curstate.rendermode == kRenderTransAdd ) GL_Cull( GL_NONE ); - if( gl_polyoffset->value ) + if( gl_polyoffset.value ) { pglEnable( GL_POLYGON_OFFSET_FILL ); - pglPolygonOffset( -1.0f, -gl_polyoffset->value ); + pglPolygonOffset( -1.0f, -gl_polyoffset.value ); } for( i = 0; i < tr.num_draw_decals; i++ ) @@ -1076,7 +1076,7 @@ void DrawDecalsBatch( void ) pglDisable( GL_ALPHA_TEST ); } - if( gl_polyoffset->value ) + if( gl_polyoffset.value ) pglDisable( GL_POLYGON_OFFSET_FILL ); if( e->curstate.rendermode == kRenderTransTexture || e->curstate.rendermode == kRenderTransAdd ) diff --git a/ref/gl/gl_frustum.c b/ref/gl/gl_frustum.c index 46dd2be9..3a25913d 100644 --- a/ref/gl/gl_frustum.c +++ b/ref/gl/gl_frustum.c @@ -102,7 +102,7 @@ qboolean GL_FrustumCullBox( gl_frustum_t *out, const vec3_t mins, const vec3_t m int iClipFlags; int i, bit; - if( r_nocull->value ) + if( r_nocull.value ) return false; if( userClipFlags != 0 ) @@ -163,7 +163,7 @@ qboolean GL_FrustumCullSphere( gl_frustum_t *out, const vec3_t center, float rad int iClipFlags; int i, bit; - if( r_nocull->value ) + if( r_nocull.value ) return false; if( userClipFlags != 0 ) diff --git a/ref/gl/gl_image.c b/ref/gl/gl_image.c index 057271fe..606ec891 100644 --- a/ref/gl/gl_image.c +++ b/ref/gl/gl_image.c @@ -167,7 +167,7 @@ void GL_ApplyTextureParams( gl_texture_t *tex ) } else if( FBitSet( tex->flags, TF_NOMIPMAP ) || tex->numMips <= 1 ) { - if( FBitSet( tex->flags, TF_NEAREST ) || ( IsLightMap( tex ) && gl_lightmap_nearest->value )) + if( FBitSet( tex->flags, TF_NEAREST ) || ( IsLightMap( tex ) && gl_lightmap_nearest.value )) { pglTexParameteri( tex->target, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); pglTexParameteri( tex->target, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); @@ -180,7 +180,7 @@ void GL_ApplyTextureParams( gl_texture_t *tex ) } else { - if( FBitSet( tex->flags, TF_NEAREST ) || gl_texture_nearest->value ) + if( FBitSet( tex->flags, TF_NEAREST ) || gl_texture_nearest.value ) { pglTexParameteri( tex->target, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST ); pglTexParameteri( tex->target, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); @@ -193,11 +193,11 @@ void GL_ApplyTextureParams( gl_texture_t *tex ) // set texture anisotropy if available if( GL_Support( GL_ANISOTROPY_EXT ) && ( tex->numMips > 1 ) && !FBitSet( tex->flags, TF_ALPHACONTRAST )) - pglTexParameterf( tex->target, GL_TEXTURE_MAX_ANISOTROPY_EXT, gl_texture_anisotropy->value ); + pglTexParameterf( tex->target, GL_TEXTURE_MAX_ANISOTROPY_EXT, gl_texture_anisotropy.value ); // set texture LOD bias if available if( GL_Support( GL_TEXTURE_LOD_BIAS ) && ( tex->numMips > 1 )) - pglTexParameterf( tex->target, GL_TEXTURE_LOD_BIAS_EXT, gl_texture_lodbias->value ); + pglTexParameterf( tex->target, GL_TEXTURE_LOD_BIAS_EXT, gl_texture_lodbias.value ); } // check if border is not supported @@ -276,15 +276,15 @@ static void GL_UpdateTextureParams( int iTexture ) // set texture anisotropy if available if( GL_Support( GL_ANISOTROPY_EXT ) && ( tex->numMips > 1 ) && !FBitSet( tex->flags, TF_DEPTHMAP|TF_ALPHACONTRAST )) - pglTexParameterf( tex->target, GL_TEXTURE_MAX_ANISOTROPY_EXT, gl_texture_anisotropy->value ); + pglTexParameterf( tex->target, GL_TEXTURE_MAX_ANISOTROPY_EXT, gl_texture_anisotropy.value ); // set texture LOD bias if available if( GL_Support( GL_TEXTURE_LOD_BIAS ) && ( tex->numMips > 1 ) && !FBitSet( tex->flags, TF_DEPTHMAP )) - pglTexParameterf( tex->target, GL_TEXTURE_LOD_BIAS_EXT, gl_texture_lodbias->value ); + pglTexParameterf( tex->target, GL_TEXTURE_LOD_BIAS_EXT, gl_texture_lodbias.value ); if( IsLightMap( tex )) { - if( gl_lightmap_nearest->value ) + if( gl_lightmap_nearest.value ) { pglTexParameteri( tex->target, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); pglTexParameteri( tex->target, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); @@ -298,7 +298,7 @@ static void GL_UpdateTextureParams( int iTexture ) if( tex->numMips <= 1 ) return; - if( FBitSet( tex->flags, TF_NEAREST ) || gl_texture_nearest->value ) + if( FBitSet( tex->flags, TF_NEAREST ) || gl_texture_nearest.value ) { pglTexParameteri( tex->target, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST ); pglTexParameteri( tex->target, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); @@ -321,24 +321,24 @@ void R_SetTextureParameters( void ) if( GL_Support( GL_ANISOTROPY_EXT )) { - if( gl_texture_anisotropy->value > glConfig.max_texture_anisotropy ) + if( gl_texture_anisotropy.value > glConfig.max_texture_anisotropy ) gEngfuncs.Cvar_SetValue( "gl_anisotropy", glConfig.max_texture_anisotropy ); - else if( gl_texture_anisotropy->value < 1.0f ) + else if( gl_texture_anisotropy.value < 1.0f ) gEngfuncs.Cvar_SetValue( "gl_anisotropy", 1.0f ); } if( GL_Support( GL_TEXTURE_LOD_BIAS )) { - if( gl_texture_lodbias->value < -glConfig.max_texture_lod_bias ) + if( gl_texture_lodbias.value < -glConfig.max_texture_lod_bias ) gEngfuncs.Cvar_SetValue( "gl_texture_lodbias", -glConfig.max_texture_lod_bias ); - else if( gl_texture_lodbias->value > glConfig.max_texture_lod_bias ) + else if( gl_texture_lodbias.value > glConfig.max_texture_lod_bias ) gEngfuncs.Cvar_SetValue( "gl_texture_lodbias", glConfig.max_texture_lod_bias ); } - ClearBits( gl_texture_anisotropy->flags, FCVAR_CHANGED ); - ClearBits( gl_texture_lodbias->flags, FCVAR_CHANGED ); - ClearBits( gl_texture_nearest->flags, FCVAR_CHANGED ); - ClearBits( gl_lightmap_nearest->flags, FCVAR_CHANGED ); + ClearBits( gl_texture_anisotropy.flags, FCVAR_CHANGED ); + ClearBits( gl_texture_lodbias.flags, FCVAR_CHANGED ); + ClearBits( gl_texture_nearest.flags, FCVAR_CHANGED ); + ClearBits( gl_lightmap_nearest.flags, FCVAR_CHANGED ); // change all the existing mipmapped texture objects for( i = 0; i < gl_numTextures; i++ ) @@ -577,7 +577,7 @@ static void GL_SetTextureDimensions( gl_texture_t *tex, int width, int height, i if( !GL_Support( GL_ARB_TEXTURE_NPOT_EXT )) { - int step = (int)gl_round_down->value; + int step = (int)gl_round_down.value; int scaled_width, scaled_height; for( scaled_width = 1; scaled_width < width; scaled_width <<= 1 ); @@ -1140,7 +1140,7 @@ static void GL_CheckTexImageError( gl_texture_t *tex ) Assert( tex != NULL ); // catch possible errors - if( CVAR_TO_BOOL( gl_check_errors ) && ( err = pglGetError()) != GL_NO_ERROR ) + if( gl_check_errors.value && ( err = pglGetError()) != GL_NO_ERROR ) gEngfuncs.Con_Printf( S_OPENGL_ERROR "%s while uploading %s [%s]\n", GL_ErrorString( err ), tex->name, GL_TargetToString( tex->target )); } diff --git a/ref/gl/gl_local.h b/ref/gl/gl_local.h index d252e779..5d940c87 100644 --- a/ref/gl/gl_local.h +++ b/ref/gl/gl_local.h @@ -31,7 +31,7 @@ GNU General Public License for more details. #include "enginefeatures.h" #include "com_strings.h" #include "pm_movevars.h" -//#include "cvar.h" +#include "common/cvar.h" #include "gl_export.h" #include "wadfile.h" @@ -54,10 +54,6 @@ void VGL_ShimEndFrame( void ); #include -#define CVAR_DEFINE( cv, cvname, cvstr, cvflags, cvdesc ) cvar_t cv = { cvname, cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, cvdesc } -#define CVAR_DEFINE_AUTO( cv, cvstr, cvflags, cvdesc ) cvar_t cv = { #cv, cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, cvdesc } -#define CVAR_TO_BOOL( x ) ((x) && ((x)->value != 0.0f) ? true : false ) - #define WORLD (gEngfuncs.GetWorld()) #define WORLDMODEL (gEngfuncs.pfnGetModelByIndex( 1 )) #define MOVEVARS (gEngfuncs.pfnGetMoveVars()) @@ -713,36 +709,33 @@ extern ref_globals_t *gpGlobals; // // renderer cvars // -extern cvar_t *gl_texture_anisotropy; -extern cvar_t *gl_extensions; -extern cvar_t *gl_check_errors; -extern cvar_t *gl_texture_lodbias; -extern cvar_t *gl_texture_nearest; -extern cvar_t *gl_lightmap_nearest; -extern cvar_t *gl_keeptjunctions; -extern cvar_t *gl_round_down; -extern cvar_t *gl_wireframe; -extern cvar_t *gl_polyoffset; -extern cvar_t *gl_finish; -extern cvar_t *gl_nosort; -extern cvar_t *gl_clear; -extern cvar_t *gl_test; // cvar to testify new effects -extern cvar_t *gl_msaa; -extern cvar_t *gl_stencilbits; - -extern cvar_t *r_lighting_extended; -extern cvar_t *r_lighting_modulate; -extern cvar_t *r_lighting_ambient; -extern cvar_t *r_studio_lambert; -extern cvar_t *r_detailtextures; -extern cvar_t *r_drawentities; -extern cvar_t *r_novis; -extern cvar_t *r_nocull; -extern cvar_t *r_lockpvs; -extern cvar_t *r_lockfrustum; -extern cvar_t *r_traceglow; -extern cvar_t *r_vbo; -extern cvar_t *r_vbo_dlightmode; +extern convar_t gl_texture_anisotropy; +extern convar_t gl_extensions; +extern convar_t gl_check_errors; +extern convar_t gl_texture_lodbias; +extern convar_t gl_texture_nearest; +extern convar_t gl_lightmap_nearest; +extern convar_t gl_keeptjunctions; +extern convar_t gl_round_down; +extern convar_t gl_wireframe; +extern convar_t gl_polyoffset; +extern convar_t gl_finish; +extern convar_t gl_nosort; +extern convar_t gl_test; // cvar to testify new effects +extern convar_t gl_msaa; +extern convar_t gl_stencilbits; + +extern convar_t r_lighting_extended; +extern convar_t r_lighting_ambient; +extern convar_t r_studio_lambert; +extern convar_t r_detailtextures; +extern convar_t r_novis; +extern convar_t r_nocull; +extern convar_t r_lockpvs; +extern convar_t r_lockfrustum; +extern convar_t r_traceglow; +extern convar_t r_vbo; +extern convar_t r_vbo_dlightmode; // diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c index 16664ac8..0acbd8c0 100644 --- a/ref/gl/gl_opengl.c +++ b/ref/gl/gl_opengl.c @@ -5,40 +5,31 @@ #include "gl4es/include/gl4eshint.h" #endif // XASH_GL4ES -cvar_t *gl_extensions; -cvar_t *gl_texture_anisotropy; -cvar_t *gl_texture_lodbias; -cvar_t *gl_texture_nearest; -cvar_t *gl_lightmap_nearest; -cvar_t *gl_keeptjunctions; -cvar_t *gl_check_errors; -cvar_t *gl_polyoffset; -cvar_t *gl_wireframe; -cvar_t *gl_finish; -cvar_t *gl_nosort; -cvar_t *gl_vsync; -cvar_t *gl_clear; -cvar_t *gl_test; -cvar_t *gl_msaa; -cvar_t *gl_stencilbits; -cvar_t *r_lighting_extended; -cvar_t *r_lighting_modulate; -cvar_t *r_lighting_ambient; -cvar_t *r_detailtextures; -cvar_t *r_novis; -cvar_t *r_nocull; -cvar_t *r_lockpvs; -cvar_t *r_lockfrustum; -cvar_t *r_traceglow; -cvar_t *r_dynamic; -cvar_t *gl_round_down; -cvar_t *r_vbo; -cvar_t *r_vbo_dlightmode; - -cvar_t *tracerred; -cvar_t *tracergreen; -cvar_t *tracerblue; -cvar_t *traceralpha; +CVAR_DEFINE( gl_extensions, "gl_allow_extensions", "1", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "allow gl_extensions" ); +CVAR_DEFINE( gl_texture_anisotropy, "gl_anisotropy", "8", FCVAR_GLCONFIG, "textures anisotropic filter" ); +CVAR_DEFINE_AUTO( gl_texture_lodbias, "0.0", FCVAR_GLCONFIG, "LOD bias for mipmapped textures (perfomance|quality)" ); +CVAR_DEFINE_AUTO( gl_texture_nearest, "0", FCVAR_GLCONFIG, "disable texture filter" ); +CVAR_DEFINE_AUTO( gl_lightmap_nearest, "0", FCVAR_GLCONFIG, "disable lightmap filter" ); +CVAR_DEFINE_AUTO( gl_keeptjunctions, "1", FCVAR_GLCONFIG, "removing tjuncs causes blinking pixels" ); +CVAR_DEFINE_AUTO( gl_check_errors, "1", FCVAR_GLCONFIG, "ignore video engine errors" ); +CVAR_DEFINE_AUTO( gl_polyoffset, "2.0", FCVAR_GLCONFIG, "polygon offset for decals" ); +CVAR_DEFINE_AUTO( gl_wireframe, "0", FCVAR_GLCONFIG|FCVAR_SPONLY, "show wireframe overlay" ); +CVAR_DEFINE_AUTO( gl_finish, "0", FCVAR_GLCONFIG, "use glFinish instead of glFlush" ); +CVAR_DEFINE_AUTO( gl_nosort, "0", FCVAR_GLCONFIG, "disable sorting of translucent surfaces" ); +CVAR_DEFINE_AUTO( gl_test, "0", 0, "engine developer cvar for quick testing new features" ); +CVAR_DEFINE_AUTO( gl_msaa, "1", FCVAR_GLCONFIG, "enable or disable multisample anti-aliasing" ); +CVAR_DEFINE_AUTO( gl_stencilbits, "8", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "pixelformat stencil bits (0 - auto)" ); +CVAR_DEFINE_AUTO( r_lighting_extended, "1", FCVAR_GLCONFIG, "allow to get lighting from world and bmodels" ); +CVAR_DEFINE_AUTO( r_lighting_ambient, "0.3", FCVAR_GLCONFIG, "map ambient lighting scale" ); +CVAR_DEFINE_AUTO( r_detailtextures, "1", FCVAR_ARCHIVE, "enable detail textures support" ); +CVAR_DEFINE_AUTO( r_novis, "0", 0, "ignore vis information (perfomance test)" ); +CVAR_DEFINE_AUTO( r_nocull, "0", 0, "ignore frustrum culling (perfomance test)" ); +CVAR_DEFINE_AUTO( r_lockpvs, "0", FCVAR_CHEAT, "lockpvs area at current point (pvs test)" ); +CVAR_DEFINE_AUTO( r_lockfrustum, "0", FCVAR_CHEAT, "lock frustrum area at current point (cull test)" ); +CVAR_DEFINE_AUTO( r_traceglow, "1", FCVAR_GLCONFIG, "cull flares behind models" ); +CVAR_DEFINE_AUTO( gl_round_down, "2", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "round texture sizes to nearest POT value" ); +CVAR_DEFINE( r_vbo, "gl_vbo", "0", FCVAR_ARCHIVE, "draw world using VBO (known to be glitchy)" ); +CVAR_DEFINE( r_vbo_dlightmode, "gl_vbo_dlightmode", "1", FCVAR_ARCHIVE, "vbo dlight rendering mode (0-1)" ); DEFINE_ENGINE_SHARED_CVAR_LIST() @@ -345,7 +336,7 @@ qboolean GL_CheckExtension( const char *name, const dllfunc_t *funcs, const char parm = gEngfuncs.Cvar_Get( cvarname, "1", FCVAR_GLCONFIG|FCVAR_READ_ONLY, desc ); } - if(( parm && !CVAR_TO_BOOL( parm )) || ( !CVAR_TO_BOOL( gl_extensions ) && r_ext != GL_OPENGL_110 )) + if(( parm && !parm->value ) || ( !gl_extensions.value && r_ext != GL_OPENGL_110 )) { gEngfuncs.Con_Reportf( "- disabled\n" ); GL_SetExtension( r_ext, false ); @@ -807,7 +798,7 @@ void GL_InitExtensions( void ) Q_snprintf( value, sizeof( value ), "%i", glConfig.max_2d_texture_size ); gEngfuncs.Cvar_Get( "gl_max_size", value, 0, "opengl texture max dims" ); - gEngfuncs.Cvar_SetValue( "gl_anisotropy", bound( 0, gl_texture_anisotropy->value, glConfig.max_texture_anisotropy )); + gEngfuncs.Cvar_SetValue( "gl_anisotropy", bound( 0, gl_texture_anisotropy.value, glConfig.max_texture_anisotropy )); if( GL_Support( GL_TEXTURE_COMPRESSION_EXT )) gEngfuncs.Image_AddCmdFlags( IL_DDS_HARDWARE ); @@ -846,33 +837,32 @@ void GL_InitCommands( void ) { RETRIEVE_ENGINE_SHARED_CVAR_LIST(); - r_lighting_extended = gEngfuncs.Cvar_Get( "r_lighting_extended", "1", FCVAR_GLCONFIG, "allow to get lighting from world and bmodels" ); - r_lighting_modulate = gEngfuncs.Cvar_Get( "r_lighting_modulate", "0.6", FCVAR_GLCONFIG, "lightstyles modulate scale" ); - r_lighting_ambient = gEngfuncs.Cvar_Get( "r_lighting_ambient", "0.3", FCVAR_GLCONFIG, "map ambient lighting scale" ); - r_novis = gEngfuncs.Cvar_Get( "r_novis", "0", 0, "ignore vis information (perfomance test)" ); - r_nocull = gEngfuncs.Cvar_Get( "r_nocull", "0", 0, "ignore frustrum culling (perfomance test)" ); - r_detailtextures = gEngfuncs.Cvar_Get( "r_detailtextures", "1", FCVAR_ARCHIVE, "enable detail textures support" ); - r_lockpvs = gEngfuncs.Cvar_Get( "r_lockpvs", "0", FCVAR_CHEAT, "lockpvs area at current point (pvs test)" ); - r_lockfrustum = gEngfuncs.Cvar_Get( "r_lockfrustum", "0", FCVAR_CHEAT, "lock frustrum area at current point (cull test)" ); - r_traceglow = gEngfuncs.Cvar_Get( "r_traceglow", "1", FCVAR_GLCONFIG, "cull flares behind models" ); - - gl_extensions = gEngfuncs.Cvar_Get( "gl_allow_extensions", "1", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "allow gl_extensions" ); - gl_texture_nearest = gEngfuncs.Cvar_Get( "gl_texture_nearest", "0", FCVAR_GLCONFIG, "disable texture filter" ); - gl_lightmap_nearest = gEngfuncs.Cvar_Get( "gl_lightmap_nearest", "0", FCVAR_GLCONFIG, "disable lightmap filter" ); - gl_check_errors = gEngfuncs.Cvar_Get( "gl_check_errors", "1", FCVAR_GLCONFIG, "ignore video engine errors" ); - gl_texture_anisotropy = gEngfuncs.Cvar_Get( "gl_anisotropy", "8", FCVAR_GLCONFIG, "textures anisotropic filter" ); - gl_texture_lodbias = gEngfuncs.Cvar_Get( "gl_texture_lodbias", "0.0", FCVAR_GLCONFIG, "LOD bias for mipmapped textures (perfomance|quality)" ); - gl_keeptjunctions = gEngfuncs.Cvar_Get( "gl_keeptjunctions", "1", FCVAR_GLCONFIG, "removing tjuncs causes blinking pixels" ); - gl_finish = gEngfuncs.Cvar_Get( "gl_finish", "0", FCVAR_GLCONFIG, "use glFinish instead of glFlush" ); - gl_nosort = gEngfuncs.Cvar_Get( "gl_nosort", "0", FCVAR_GLCONFIG, "disable sorting of translucent surfaces" ); - gl_test = gEngfuncs.Cvar_Get( "gl_test", "0", 0, "engine developer cvar for quick testing new features" ); - gl_wireframe = gEngfuncs.Cvar_Get( "gl_wireframe", "0", FCVAR_GLCONFIG|FCVAR_SPONLY, "show wireframe overlay" ); - gl_msaa = gEngfuncs.Cvar_Get( "gl_msaa", "1", FCVAR_GLCONFIG, "enable or disable multisample anti-aliasing" ); - gl_stencilbits = gEngfuncs.Cvar_Get( "gl_stencilbits", "8", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "pixelformat stencil bits (0 - auto)" ); - gl_round_down = gEngfuncs.Cvar_Get( "gl_round_down", "2", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "round texture sizes to nearest POT value" ); + gEngfuncs.Cvar_RegisterVariable( &r_lighting_extended ); + gEngfuncs.Cvar_RegisterVariable( &r_lighting_ambient ); + gEngfuncs.Cvar_RegisterVariable( &r_novis ); + gEngfuncs.Cvar_RegisterVariable( &r_nocull ); + gEngfuncs.Cvar_RegisterVariable( &r_detailtextures ); + gEngfuncs.Cvar_RegisterVariable( &r_lockpvs ); + gEngfuncs.Cvar_RegisterVariable( &r_lockfrustum ); + gEngfuncs.Cvar_RegisterVariable( &r_traceglow ); + + gEngfuncs.Cvar_RegisterVariable( &gl_extensions ); + gEngfuncs.Cvar_RegisterVariable( &gl_texture_nearest ); + gEngfuncs.Cvar_RegisterVariable( &gl_lightmap_nearest ); + gEngfuncs.Cvar_RegisterVariable( &gl_check_errors ); + gEngfuncs.Cvar_RegisterVariable( &gl_texture_anisotropy ); + gEngfuncs.Cvar_RegisterVariable( &gl_texture_lodbias ); + gEngfuncs.Cvar_RegisterVariable( &gl_keeptjunctions ); + gEngfuncs.Cvar_RegisterVariable( &gl_finish ); + gEngfuncs.Cvar_RegisterVariable( &gl_nosort ); + gEngfuncs.Cvar_RegisterVariable( &gl_test ); + gEngfuncs.Cvar_RegisterVariable( &gl_wireframe ); + gEngfuncs.Cvar_RegisterVariable( &gl_msaa ); + gEngfuncs.Cvar_RegisterVariable( &gl_stencilbits ); + gEngfuncs.Cvar_RegisterVariable( &gl_round_down ); // these cvar not used by engine but some mods requires this - gl_polyoffset = gEngfuncs.Cvar_Get( "gl_polyoffset", "2.0", FCVAR_GLCONFIG, "polygon offset for decals" ); + gEngfuncs.Cvar_RegisterVariable( &gl_polyoffset ); // make sure gl_vsync is checked after vid_restart SetBits( gl_vsync->flags, FCVAR_CHANGED ); @@ -890,9 +880,6 @@ register VBO cvars and get default value */ static void R_CheckVBO( void ) { - const char *def = "0"; - const char *dlightmode = "1"; - int flags = FCVAR_ARCHIVE; qboolean disable = false; // some bad GLES1 implementations breaks dlights completely @@ -904,21 +891,17 @@ static void R_CheckVBO( void ) // Disable it, as there is no suitable workaround here if( Q_stristr( glConfig.renderer_string, "VideoCore IV" ) || Q_stristr( glConfig.renderer_string, "vc4" ) ) disable = true; - - // dlightmode 1 is not too much tested on android - // so better to left it off - dlightmode = "0"; #endif if( disable ) { - // do not keep in config unless dev > 3 and enabled - flags = 0; - def = "0"; + r_vbo.flags = r_vbo_dlightmode.flags = 0; + r_vbo.string = "0"; + r_vbo_dlightmode.string = "0"; } - r_vbo = gEngfuncs.Cvar_Get( "gl_vbo", def, flags, "draw world using VBO (known to be glitchy)" ); - r_vbo_dlightmode = gEngfuncs.Cvar_Get( "gl_vbo_dlightmode", dlightmode, FCVAR_ARCHIVE, "vbo dlight rendering mode(0-1)" ); + gEngfuncs.Cvar_RegisterVariable( &r_vbo ); + gEngfuncs.Cvar_RegisterVariable( &r_vbo_dlightmode ); } /* @@ -1030,7 +1013,7 @@ void GL_CheckForErrors_( const char *filename, const int fileline ) { int err; - if( !CVAR_TO_BOOL( gl_check_errors )) + if( !gl_check_errors.value ) return; if(( err = pglGetError( )) == GL_NO_ERROR ) @@ -1099,7 +1082,7 @@ void GL_SetupAttributes( int safegl ) gEngfuncs.Con_Printf( "bpp %d\n", gpGlobals->desktopBitsPixel ); if( safegl < SAFE_NOSTENCIL ) - gEngfuncs.GL_SetAttribute( REF_GL_STENCIL_SIZE, gl_stencilbits->value ); + gEngfuncs.GL_SetAttribute( REF_GL_STENCIL_SIZE, gl_stencilbits.value ); if( safegl < SAFE_NOALPHA ) gEngfuncs.GL_SetAttribute( REF_GL_ALPHA_SIZE, 8 ); diff --git a/ref/gl/gl_rlight.c b/ref/gl/gl_rlight.c index 514b58b4..87036181 100644 --- a/ref/gl/gl_rlight.c +++ b/ref/gl/gl_rlight.c @@ -74,7 +74,7 @@ void CL_RunLightStyles( void ) tr.lightstylevalue[i] = ls->map[0] * 22 * scale; continue; } - else if( !ls->interp || !CVAR_TO_BOOL( cl_lightstyle_lerping )) + else if( !ls->interp || !cl_lightstyle_lerping->flags ) { tr.lightstylevalue[i] = ls->map[flight%ls->length] * 22 * scale; continue; @@ -376,7 +376,7 @@ colorVec R_LightVecInternal( const vec3_t start, const vec3_t end, vec3_t lspot, last_fraction = 1.0f; // get light from bmodels too - if( CVAR_TO_BOOL( r_lighting_extended )) + if( r_lighting_extended.value ) maxEnts = MAX_PHYSENTS; // check all the bsp-models @@ -448,7 +448,7 @@ colorVec R_LightVec( const vec3_t start, const vec3_t end, vec3_t lspot, vec3_t { colorVec light = R_LightVecInternal( start, end, lspot, lvec ); - if( CVAR_TO_BOOL( r_lighting_extended ) && lspot != NULL && lvec != NULL ) + if( r_lighting_extended.value && lspot != NULL && lvec != NULL ) { // trying to get light from ceiling (but ignore gradient analyze) if(( light.r + light.g + light.b ) == 0 ) diff --git a/ref/gl/gl_rmain.c b/ref/gl/gl_rmain.c index bc8f9229..b57d9ea5 100644 --- a/ref/gl/gl_rmain.c +++ b/ref/gl/gl_rmain.c @@ -345,7 +345,7 @@ void R_SetupFrustum( void ) // build the transformation matrix for the given view angles AngleVectors( RI.viewangles, RI.vforward, RI.vright, RI.vup ); - if( !r_lockfrustum->value ) + if( !r_lockfrustum.value ) { VectorCopy( RI.vieworg, RI.cullorigin ); VectorCopy( RI.vforward, RI.cull_vforward ); @@ -495,7 +495,7 @@ static void R_SetupFrame( void ) // NOTE: this request is the fps-killer on some NVidia drivers glState.isFogEnabled = pglIsEnabled( GL_FOG ); - if( !gl_nosort->value ) + if( !gl_nosort.value ) { // sort translucents entities by rendermode and distance qsort( tr.draw_list->trans_entities, tr.draw_list->num_trans_entities, sizeof( cl_entity_t* ), R_TransEntityCompare ); @@ -1030,7 +1030,7 @@ void R_BeginFrame( qboolean clearScene ) pglDrawBuffer( GL_BACK ); // update texture parameters - if( FBitSet( gl_texture_nearest->flags|gl_lightmap_nearest->flags|gl_texture_anisotropy->flags|gl_texture_lodbias->flags, FCVAR_CHANGED )) + if( FBitSet( gl_texture_nearest.flags|gl_lightmap_nearest.flags|gl_texture_anisotropy.flags|gl_texture_lodbias.flags, FCVAR_CHANGED )) R_SetTextureParameters(); gEngfuncs.CL_ExtraUpdate (); @@ -1082,15 +1082,15 @@ void R_RenderFrame( const ref_viewpass_t *rvp ) // setup the initial render params R_SetupRefParams( rvp ); - if( gl_finish->value && RI.drawWorld ) + if( gl_finish.value && RI.drawWorld ) pglFinish(); - if( glConfig.max_multisamples > 1 && FBitSet( gl_msaa->flags, FCVAR_CHANGED )) + if( glConfig.max_multisamples > 1 && FBitSet( gl_msaa.flags, FCVAR_CHANGED )) { - if( CVAR_TO_BOOL( gl_msaa )) + if( gl_msaa.value ) pglEnable( GL_MULTISAMPLE_ARB ); else pglDisable( GL_MULTISAMPLE_ARB ); - ClearBits( gl_msaa->flags, FCVAR_CHANGED ); + ClearBits( gl_msaa.flags, FCVAR_CHANGED ); } // completely override rendering diff --git a/ref/gl/gl_rmisc.c b/ref/gl/gl_rmisc.c index 9c5da914..617d65fa 100644 --- a/ref/gl/gl_rmisc.c +++ b/ref/gl/gl_rmisc.c @@ -113,7 +113,7 @@ void R_NewMap( void ) R_StudioResetPlayerModels(); // upload detailtextures - if( CVAR_TO_BOOL( r_detailtextures )) + if( r_detailtextures.value ) { string mapname, filepath; diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c index 3c505dea..73877453 100644 --- a/ref/gl/gl_rsurf.c +++ b/ref/gl/gl_rsurf.c @@ -214,8 +214,8 @@ void GL_SetupFogColorForSurfaces( void ) return; } - div = (r_detailtextures->value) ? 2.0f : 1.0f; - factor = (r_detailtextures->value) ? 3.0f : 2.0f; + div = (r_detailtextures.value) ? 2.0f : 1.0f; + factor = (r_detailtextures.value) ? 3.0f : 2.0f; fogColor[0] = pow( RI.fogColor[0] / div, ( 1.0f / factor )); fogColor[1] = pow( RI.fogColor[1] / div, ( 1.0f / factor )); fogColor[2] = pow( RI.fogColor[2] / div, ( 1.0f / factor )); @@ -355,7 +355,7 @@ void GL_BuildPolygonFromSurface( model_t *mod, msurface_t *fa ) } // remove co-linear points - Ed - if( !CVAR_TO_BOOL( gl_keeptjunctions ) && !FBitSet( fa->flags, SURF_UNDERWATER )) + if( !gl_keeptjunctions.value && !FBitSet( fa->flags, SURF_UNDERWATER )) { for( i = 0; i < lnumverts; i++ ) { @@ -879,7 +879,7 @@ void DrawGLPolyChain( glpoly_t *p, float soffset, float toffset ) _inline qboolean R_HasLightmap( void ) { - if( CVAR_TO_BOOL( r_fullbright ) || !WORLDMODEL->lightdata ) + if( r_fullbright->value || !WORLDMODEL->lightdata ) return false; if( RI.currententity ) @@ -916,7 +916,7 @@ void R_BlendLightmaps( void ) GL_SetupFogColorForSurfaces (); - if( !CVAR_TO_BOOL( r_lightmap )) + if( !r_lightmap->value ) pglEnable( GL_BLEND ); else pglDisable( GL_BLEND ); @@ -943,7 +943,7 @@ void R_BlendLightmaps( void ) } // render dynamic lightmaps - if( CVAR_TO_BOOL( r_dynamic )) + if( r_dynamic->value ) { LM_InitBlock(); @@ -1153,7 +1153,7 @@ void R_RenderBrushPoly( msurface_t *fa, int cull_type ) draw_fullbrights = true; } - if( CVAR_TO_BOOL( r_detailtextures )) + if( r_detailtextures.value ) { if( glState.isFogEnabled ) { @@ -1522,7 +1522,7 @@ void R_DrawBrushModel( cl_entity_t *e ) model_t *clmodel; qboolean rotated; dlight_t *l; - qboolean allow_vbo = CVAR_TO_BOOL( r_vbo ); + qboolean allow_vbo = r_vbo.value; if( !RI.drawWorld ) return; @@ -1627,7 +1627,7 @@ void R_DrawBrushModel( cl_entity_t *e ) } // sort faces if needs - if( !FBitSet( clmodel->flags, MODEL_LIQUID ) && e->curstate.rendermode == kRenderTransTexture && !CVAR_TO_BOOL( gl_nosort )) + if( !FBitSet( clmodel->flags, MODEL_LIQUID ) && e->curstate.rendermode == kRenderTransTexture && !gl_nosort.value ) qsort( gpGlobals->draw_surfaces, num_sorted, sizeof( sortedface_t ), R_SurfaceCompare ); // draw sorted translucent surfaces @@ -1803,8 +1803,8 @@ void R_GenerateVBO( void ) } // save in config if enabled manually - if( CVAR_TO_BOOL( r_vbo ) ) - r_vbo->flags |= FCVAR_ARCHIVE; + if( r_vbo.value ) + r_vbo.flags |= FCVAR_ARCHIVE; vbos.mempool = Mem_AllocPool("Render VBO Zone"); @@ -1979,7 +1979,7 @@ void R_GenerateVBO( void ) // select maximum possible length for dlight vbos.dlight_tc = Mem_Calloc( vbos.mempool, sizeof( vec2_t ) * (int)(vbos.arraylist->next?USHRT_MAX + 1:vbos.arraylist->array_len + 1) ); - if( CVAR_TO_BOOL(r_vbo_dlightmode) ) + if( r_vbo_dlightmode.value ) { pglGenBuffersARB( 1, &vbos.dlight_vbo ); pglBindBufferARB( GL_ARRAY_BUFFER_ARB, vbos.dlight_vbo ); @@ -2176,7 +2176,7 @@ static texture_t *R_SetupVBOTexture( texture_t *tex, int number ) if( !tex ) tex = R_TextureAnim( WORLDMODEL->textures[number] ); - if( CVAR_TO_BOOL( r_detailtextures ) && tex->dt_texturenum && mtst.tmu_dt != -1 ) + if( r_detailtextures.value && tex->dt_texturenum && mtst.tmu_dt != -1 ) { mtst.details_enabled = true; GL_Bind( mtst.tmu_dt, tex->dt_texturenum ); @@ -2185,7 +2185,7 @@ static texture_t *R_SetupVBOTexture( texture_t *tex, int number ) } else R_DisableDetail(); - GL_Bind( mtst.tmu_gl, CVAR_TO_BOOL( r_lightmap )?tr.whiteTexture:tex->gl_texturenum ); + GL_Bind( mtst.tmu_gl, r_lightmap->value ?tr.whiteTexture:tex->gl_texturenum ); return tex; } @@ -2200,7 +2200,7 @@ draw details when not enough tmus static void R_AdditionalPasses( vboarray_t *vbo, int indexlen, void *indexarray, texture_t *tex, qboolean resetvbo ) { // draw details in additional pass - if( r_detailtextures->value && mtst.tmu_dt == -1 && tex->dt_texturenum ) + if( r_detailtextures.value && mtst.tmu_dt == -1 && tex->dt_texturenum ) { gl_texture_t *glt = R_GetTexture( tex->gl_texturenum ); @@ -2266,7 +2266,7 @@ static void R_DrawLightmappedVBO( vboarray_t *vbo, vbotexture_t *vbotex, texture R_AdditionalPasses( vbo, vbotex->curindex, vbotex->indexarray, texture, false ); // draw debug lines - if( CVAR_TO_BOOL(gl_wireframe) && !skiplighting ) + if( gl_wireframe.value && !skiplighting ) { R_SetDecalMode( true ); pglDisable( GL_TEXTURE_2D ); @@ -2640,7 +2640,7 @@ void R_DrawVBO( qboolean drawlightmap, qboolean drawtextures ) int k; vboarray_t *vbo = vbos.arraylist; - if( !CVAR_TO_BOOL( r_vbo ) ) + if( !r_vbo.value ) return; // bind array @@ -2969,7 +2969,7 @@ static qboolean R_CheckLightMap( msurface_t *fa ) qboolean R_AddSurfToVBO( msurface_t *surf, qboolean buildlightmap ) { - if( CVAR_TO_BOOL(r_vbo) && vbos.surfdata[surf - WORLDMODEL->surfaces].vbotexture ) + if( r_vbo.value && vbos.surfdata[surf - WORLDMODEL->surfaces].vbotexture ) { // find vbotexture_t assotiated with this surface int idx = surf - WORLDMODEL->surfaces; @@ -2988,7 +2988,7 @@ qboolean R_AddSurfToVBO( msurface_t *surf, qboolean buildlightmap ) if( vbos.mintexture > texturenum ) vbos.mintexture = texturenum; - buildlightmap &= !CVAR_TO_BOOL( r_fullbright ) && !!WORLDMODEL->lightdata; + buildlightmap &= !r_fullbright->value && !!WORLDMODEL->lightdata; if( buildlightmap && R_CheckLightMap( surf ) ) { @@ -3047,7 +3047,7 @@ loc0: if( node->visframe != tr.visframecount ) return; - if( clipflags && !CVAR_TO_BOOL( r_nocull )) + if( clipflags && !r_nocull.value ) { for( i = 0; i < 6; i++ ) { @@ -3198,7 +3198,7 @@ void R_DrawWorldTopView( mnode_t *node, uint clipflags ) if( node->visframe != tr.visframecount ) return; - if( clipflags && !r_nocull->value ) + if( clipflags && !r_nocull.value ) { for( i = 0; i < 6; i++ ) { @@ -3262,7 +3262,7 @@ void R_DrawTriangleOutlines( void ) glpoly_t *p; float *v; - if( !gl_wireframe->value ) + if( !gl_wireframe.value ) return; pglDisable( GL_TEXTURE_2D ); @@ -3347,7 +3347,7 @@ void R_DrawWorld( void ) r_stats.t_world_node = end - start; start = gEngfuncs.pfnTime(); - R_DrawVBO( !CVAR_TO_BOOL(r_fullbright) && !!WORLDMODEL->lightdata, true ); + R_DrawVBO( !r_fullbright->value && !!WORLDMODEL->lightdata, true ); R_DrawTextureChains(); @@ -3392,10 +3392,10 @@ void R_MarkLeaves( void ) if( !RI.drawWorld ) return; - if( FBitSet( r_novis->flags, FCVAR_CHANGED ) || tr.fResetVis ) + if( FBitSet( r_novis.flags, FCVAR_CHANGED ) || tr.fResetVis ) { // force recalc viewleaf - ClearBits( r_novis->flags, FCVAR_CHANGED ); + ClearBits( r_novis.flags, FCVAR_CHANGED ); tr.fResetVis = false; RI.viewleaf = NULL; } @@ -3425,12 +3425,12 @@ void R_MarkLeaves( void ) // development aid to let you run around // and see exactly where the pvs ends - if( r_lockpvs->value ) return; + if( r_lockpvs.value ) return; RI.oldviewleaf = RI.viewleaf; tr.visframecount++; - if( r_novis->value || RI.drawOrtho || !RI.viewleaf || !WORLDMODEL->visdata ) + 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 ); diff --git a/ref/gl/gl_sprite.c b/ref/gl/gl_sprite.c index 7ed990f4..8240f2d3 100644 --- a/ref/gl/gl_sprite.c +++ b/ref/gl/gl_sprite.c @@ -666,7 +666,7 @@ static float R_SpriteGlowBlend( vec3_t origin, int rendermode, int renderfx, flo if( RP_NORMALPASS( )) { - tr = gEngfuncs.EV_VisTraceLine( RI.vieworg, origin, r_traceglow->value ? PM_GLASS_IGNORE : (PM_GLASS_IGNORE|PM_STUDIO_IGNORE)); + tr = gEngfuncs.EV_VisTraceLine( RI.vieworg, origin, r_traceglow.value ? PM_GLASS_IGNORE : (PM_GLASS_IGNORE|PM_STUDIO_IGNORE)); if(( 1.0f - tr->fraction ) * dist > 8.0f ) return 0.0f; diff --git a/ref/gl/gl_studio.c b/ref/gl/gl_studio.c index 44b6a044..96e83ba2 100644 --- a/ref/gl/gl_studio.c +++ b/ref/gl/gl_studio.c @@ -121,9 +121,9 @@ typedef struct } studio_draw_state_t; // studio-related cvars -static cvar_t *r_studio_sort_textures; +static CVAR_DEFINE_AUTO( r_studio_sort_textures, "0", FCVAR_GLCONFIG, "change draw order for additive meshes" ); static cvar_t *cl_righthand = NULL; -static cvar_t *r_studio_drawelements; +static CVAR_DEFINE_AUTO( r_studio_drawelements, "1", FCVAR_GLCONFIG, "use glDrawElements for studiomodels" ); static r_studio_interface_t *pStudioDraw; static studio_draw_state_t g_studio; // global studio state @@ -146,8 +146,8 @@ R_StudioInit */ void R_StudioInit( void ) { - r_studio_sort_textures = gEngfuncs.Cvar_Get( "r_studio_sort_textures", "0", FCVAR_GLCONFIG, "change draw order for additive meshes" ); - r_studio_drawelements = gEngfuncs.Cvar_Get( "r_studio_drawelements", "1", FCVAR_GLCONFIG, "use glDrawElements for studiomodels" ); + gEngfuncs.Cvar_RegisterVariable( &r_studio_sort_textures ); + gEngfuncs.Cvar_RegisterVariable( &r_studio_drawelements ); #if XASH_PSVITA // don't do the same array-building work twice since that's what our FFP shim does anyway @@ -2331,7 +2331,7 @@ static void R_StudioDrawPoints( void ) } } - if( r_studio_sort_textures->value && need_sort ) + if( r_studio_sort_textures.value && need_sort ) { // resort opaque and translucent meshes draw order qsort( g_studio.meshes, m_pSubModel->nummesh, sizeof( sortedmesh_t ), R_StudioMeshCompare ); @@ -2378,7 +2378,7 @@ static void R_StudioDrawPoints( void ) R_StudioSetupSkin( m_pStudioHeader, pskinref[pmesh->skinref] ); - if( CVAR_TO_BOOL(r_studio_drawelements) ) + if( r_studio_drawelements.value ) { if( FBitSet( g_nFaceFlags, STUDIO_NF_CHROME )) R_StudioBuildArrayChromeMesh( ptricmds, pstudionorms, s, t, shellscale );