From d19dc43311eac2e255a71ec073a36f2ec461a983 Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Sat, 16 Aug 2014 22:29:44 -0600 Subject: [PATCH] wateralpha: add hack in cvar system so setting r_wateralpha (or r_slimealpha, etc) to their current value will still fire the callback, so we switch from using the map's worldspawn value to the cvar value --- Quake/cvar.c | 5 +++++ Quake/cvar.h | 2 +- Quake/gl_rmain.c | 8 ++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Quake/cvar.c b/Quake/cvar.c index 1dd9ff29..abb5b5aa 100644 --- a/Quake/cvar.c +++ b/Quake/cvar.c @@ -396,7 +396,12 @@ void Cvar_SetQuick (cvar_t *var, const char *value) int len; if (!strcmp(var->string, value)) + { + if (var->flags & CVAR_CALLBACK_IF_UNCHANGED && var->callback) + var->callback (var); + return; // no change + } var->flags |= CVAR_CHANGED; len = Q_strlen (value); diff --git a/Quake/cvar.h b/Quake/cvar.h index 19717751..c233bc4e 100644 --- a/Quake/cvar.h +++ b/Quake/cvar.h @@ -73,7 +73,7 @@ interface from being ambiguous. #define CVAR_LOCKED (1U << 8) // locked temporarily #define CVAR_REGISTERED (1U << 10) // the var is added to the list of variables #define CVAR_CALLBACK (1U << 16) // var has a callback - +#define CVAR_CALLBACK_IF_UNCHANGED (1U << 17) // invoke the callback when the cvar is set, even if setting it to the same value typedef void (*cvarcallback_t) (struct cvar_s *); diff --git a/Quake/gl_rmain.c b/Quake/gl_rmain.c index 3e88f6dd..e728ef62 100644 --- a/Quake/gl_rmain.c +++ b/Quake/gl_rmain.c @@ -67,7 +67,7 @@ cvar_t r_speeds = {"r_speeds","0",CVAR_NONE}; cvar_t r_fullbright = {"r_fullbright","0",CVAR_NONE}; cvar_t r_lightmap = {"r_lightmap","0",CVAR_NONE}; cvar_t r_shadows = {"r_shadows","0",CVAR_ARCHIVE}; -cvar_t r_wateralpha = {"r_wateralpha","1",CVAR_ARCHIVE}; +cvar_t r_wateralpha = {"r_wateralpha","1",CVAR_ARCHIVE | CVAR_CALLBACK_IF_UNCHANGED}; cvar_t r_dynamic = {"r_dynamic","1",CVAR_ARCHIVE}; cvar_t r_novis = {"r_novis","0",CVAR_ARCHIVE}; @@ -102,9 +102,9 @@ extern cvar_t r_vfog; //johnfitz cvar_t gl_zfix = {"gl_zfix", "1", CVAR_ARCHIVE}; // QuakeSpasm z-fighting fix -cvar_t r_lavaalpha = {"r_lavaalpha","0",CVAR_NONE}; -cvar_t r_telealpha = {"r_telealpha","0",CVAR_NONE}; -cvar_t r_slimealpha = {"r_slimealpha","0",CVAR_NONE}; +cvar_t r_lavaalpha = {"r_lavaalpha","0",CVAR_NONE | CVAR_CALLBACK_IF_UNCHANGED}; +cvar_t r_telealpha = {"r_telealpha","0",CVAR_NONE | CVAR_CALLBACK_IF_UNCHANGED}; +cvar_t r_slimealpha = {"r_slimealpha","0",CVAR_NONE | CVAR_CALLBACK_IF_UNCHANGED}; qboolean r_drawflat_cheatsafe, r_fullbright_cheatsafe, r_lightmap_cheatsafe, r_drawworld_cheatsafe; //johnfitz