From 95e0be7afe7a98da3f56f20debdedf2712fa27b0 Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Mon, 18 May 2015 18:00:49 +0000 Subject: [PATCH] add r_noshadow_list cvar (from MarkV), removing hardcoded list of models to not have shadows git-svn-id: svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@1210 af15c1b1-3010-417e-b628-4374ebc0bcbd --- Quake/gl_model.c | 50 ++++++++++++++++++++++++++---------------------- Quake/gl_rmain.c | 2 ++ Quake/gl_rmisc.c | 9 ++++++--- 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/Quake/gl_model.c b/Quake/gl_model.c index ca15d639..d6dc5584 100644 --- a/Quake/gl_model.c +++ b/Quake/gl_model.c @@ -2399,25 +2399,15 @@ void Mod_CalcAliasBounds (aliashdr_t *a) loadmodel->ymaxs[2] = loadmodel->maxs[2]; } -/* -================= -Mod_SetExtraFlags -- johnfitz -- set up extra flags that aren't in the mdl -================= -*/ -void Mod_SetExtraFlags (qmodel_t *mod) +static qboolean +nameInList(const char *list, const char *name) { - extern cvar_t r_nolerp_list; const char *s; char tmp[MAX_QPATH]; int i; - if (!mod || !mod->name || mod->type != mod_alias) - return; + s = list; - mod->flags &= 0xFF; //only preserve first byte - - // nolerp flag - s = r_nolerp_list.string; while (*s) { // make a copy until the next comma or end of string @@ -2430,23 +2420,37 @@ void Mod_SetExtraFlags (qmodel_t *mod) } tmp[i] = '\0'; //compare it to the model name - if (!strcmp(mod->name, tmp)) + if (!strcmp(name, tmp)) { - mod->flags |= MOD_NOLERP; - break; + return true; } //search forwards to the next comma or end of string while (*s && *s == ',') s++; } + return false; +} - // noshadow flag (TODO: make this a cvar list) - if (!strcmp (mod->name, "progs/flame2.mdl") || - !strcmp (mod->name, "progs/flame.mdl") || - !strcmp (mod->name, "progs/bolt1.mdl") || - !strcmp (mod->name, "progs/bolt2.mdl") || - !strcmp (mod->name, "progs/bolt3.mdl") || - !strcmp (mod->name, "progs/laser.mdl")) +/* +================= +Mod_SetExtraFlags -- johnfitz -- set up extra flags that aren't in the mdl +================= +*/ +void Mod_SetExtraFlags (qmodel_t *mod) +{ + extern cvar_t r_nolerp_list, r_noshadow_list; + + if (!mod || !mod->name || mod->type != mod_alias) + return; + + mod->flags &= 0xFF; //only preserve first byte + + // nolerp flag + if (nameInList(r_nolerp_list.string, mod->name)) + mod->flags |= MOD_NOLERP; + + // noshadow flag + if (nameInList(r_noshadow_list.string, mod->name)) mod->flags |= MOD_NOSHADOW; // fullbright hack (TODO: make this a cvar list) diff --git a/Quake/gl_rmain.c b/Quake/gl_rmain.c index 3c029958..38541eaf 100644 --- a/Quake/gl_rmain.c +++ b/Quake/gl_rmain.c @@ -96,6 +96,8 @@ cvar_t r_showbboxes = {"r_showbboxes", "0", CVAR_NONE}; cvar_t r_lerpmodels = {"r_lerpmodels", "1", CVAR_NONE}; cvar_t r_lerpmove = {"r_lerpmove", "1", CVAR_NONE}; cvar_t r_nolerp_list = {"r_nolerp_list", "progs/flame.mdl,progs/flame2.mdl,progs/braztall.mdl,progs/brazshrt.mdl,progs/longtrch.mdl,progs/flame_pyre.mdl,progs/v_saw.mdl,progs/v_xfist.mdl,progs/h2stuff/newfire.mdl", CVAR_NONE}; +cvar_t r_noshadow_list = {"r_noshadow_list", "progs/flame2.mdl,progs/flame.mdl,progs/bolt1.mdl,progs/bolt2.mdl,progs/bolt3.mdl,progs/laser.mdl", CVAR_NONE}; + extern cvar_t r_vfog; //johnfitz diff --git a/Quake/gl_rmisc.c b/Quake/gl_rmisc.c index e197427f..cc78233b 100644 --- a/Quake/gl_rmisc.c +++ b/Quake/gl_rmisc.c @@ -44,6 +44,7 @@ extern cvar_t r_showbboxes; extern cvar_t r_lerpmodels; extern cvar_t r_lerpmove; extern cvar_t r_nolerp_list; +extern cvar_t r_noshadow_list; //johnfitz extern cvar_t gl_zfix; // QuakeSpasm z-fighting fix @@ -98,10 +99,10 @@ static void R_VisChanged (cvar_t *var) /* =============== -R_NoLerpList_f -- johnfitz -- called when r_nolerp_list cvar changes +R_Model_ExtraFlags_List_f -- johnfitz -- called when r_nolerp_list or r_noshadow_list cvar changes =============== */ -static void R_NoLerpList_f (cvar_t *var) +static void R_Model_ExtraFlags_List_f (cvar_t *var) { int i; for (i=0; i < MAX_MODELS; i++) @@ -166,7 +167,9 @@ void R_Init (void) Cvar_RegisterVariable (&r_lerpmodels); Cvar_RegisterVariable (&r_lerpmove); Cvar_RegisterVariable (&r_nolerp_list); - Cvar_SetCallback (&r_nolerp_list, R_NoLerpList_f); + Cvar_SetCallback (&r_nolerp_list, R_Model_ExtraFlags_List_f); + Cvar_RegisterVariable (&r_noshadow_list); + Cvar_SetCallback (&r_noshadow_list, R_Model_ExtraFlags_List_f); //johnfitz Cvar_RegisterVariable (&gl_zfix); // QuakeSpasm z-fighting fix