From ff1d3c4257f02bbf93aae7a7f8834ebec5993688 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 25 Aug 2024 23:15:32 +0300 Subject: [PATCH] ref: gl: add cvars to scale and set minimum light for lightmapped water --- ref/gl/gl_local.h | 2 ++ ref/gl/gl_opengl.c | 4 ++++ ref/gl/gl_rmain.c | 9 ++++++++- ref/gl/gl_rsurf.c | 10 +++++++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/ref/gl/gl_local.h b/ref/gl/gl_local.h index 28d3dfc1..9b1dbc3d 100644 --- a/ref/gl/gl_local.h +++ b/ref/gl/gl_local.h @@ -749,6 +749,8 @@ extern convar_t gl_msaa; extern convar_t gl_stencilbits; extern convar_t gl_overbright; extern convar_t gl_litwater; +extern convar_t gl_litwater_minlight; +extern convar_t gl_litwater_scale; extern convar_t r_lighting_extended; extern convar_t r_lighting_ambient; diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c index 4aa3f226..69db4586 100644 --- a/ref/gl/gl_opengl.c +++ b/ref/gl/gl_opengl.c @@ -21,6 +21,8 @@ CVAR_DEFINE_AUTO( gl_msaa, "1", FCVAR_GLCONFIG, "enable or disable multisample a CVAR_DEFINE_AUTO( gl_stencilbits, "8", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "pixelformat stencil bits (0 - auto)" ); CVAR_DEFINE_AUTO( gl_overbright, "1", FCVAR_GLCONFIG, "overbrights" ); CVAR_DEFINE_AUTO( gl_litwater, "0", FCVAR_GLCONFIG, "enable lightmapped water" ); +CVAR_DEFINE_AUTO( gl_litwater_minlight, "192", FCVAR_GLCONFIG, "minimal light water receives, helps avoid too dark lightmapped water" ); +CVAR_DEFINE_AUTO( gl_litwater_scale, "1.5", FCVAR_GLCONFIG, "lightmapped water scale factor" ); 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" ); @@ -1209,6 +1211,8 @@ static void GL_InitCommands( void ) gEngfuncs.Cvar_RegisterVariable( &gl_round_down ); gEngfuncs.Cvar_RegisterVariable( &gl_overbright ); gEngfuncs.Cvar_RegisterVariable( &gl_litwater ); + gEngfuncs.Cvar_RegisterVariable( &gl_litwater_minlight ); + gEngfuncs.Cvar_RegisterVariable( &gl_litwater_scale ); // these cvar not used by engine but some mods requires this gEngfuncs.Cvar_RegisterVariable( &gl_polyoffset ); diff --git a/ref/gl/gl_rmain.c b/ref/gl/gl_rmain.c index f647c41d..13a8be06 100644 --- a/ref/gl/gl_rmain.c +++ b/ref/gl/gl_rmain.c @@ -1020,13 +1020,20 @@ static void R_CheckGamma( void ) ClearBits( gl_overbright.flags, FCVAR_CHANGED ); } - if( gl_overbright.value && ( FBitSet( r_vbo.flags, FCVAR_CHANGED ) || FBitSet( r_vbo_overbrightmode.flags, FCVAR_CHANGED ) ) ) + if( gl_overbright.value && FBitSet( r_vbo.flags|r_vbo_overbrightmode.flags, FCVAR_CHANGED )) { rebuild = true; ClearBits( r_vbo.flags, FCVAR_CHANGED ); ClearBits( r_vbo_overbrightmode.flags, FCVAR_CHANGED ); } + if( FBitSet( gl_litwater_scale.flags|gl_litwater_minlight.flags, FCVAR_CHANGED )) + { + rebuild = true; + ClearBits( gl_litwater_scale.flags, FCVAR_CHANGED ); + ClearBits( gl_litwater_minlight.flags, FCVAR_CHANGED ); + } + if( rebuild ) R_GammaChanged( false ); } diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c index e6daefa6..ce61d6e4 100644 --- a/ref/gl/gl_rsurf.c +++ b/ref/gl/gl_rsurf.c @@ -782,6 +782,14 @@ static void R_BuildLightMap( msurface_t *surf, byte *dest, int stride, qboolean { int t = bl[i] * lightscale >> 14; + // amp up water lightmap to avoid too dark water + // when the it wasn't properly lit by the level designer + if( FBitSet( surf->flags, SURF_DRAWTURB )) + { + t *= gl_litwater_scale.value; + t = Q_max( gl_litwater_minlight.value, t ); + } + if( t > 1023 ) t = 1023; @@ -1862,7 +1870,7 @@ void R_DrawBrushModel( cl_entity_t *e ) GL_ResetFogColor(); R_BlendLightmaps(); R_RenderFullbrights(); - R_RenderDetails( allow_vbo? 2: 3 ); + R_RenderDetails( allow_vbo ? 2 : 3 ); // restore fog here if( e->curstate.rendermode == kRenderTransAdd )