From 30673903ed9f76852f00772caeb65eef37bb59bd Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Fri, 27 May 2016 15:22:32 -0600 Subject: [PATCH] light: refactor dirt*SetOnCmdline variables --- include/light/light.h | 23 ++++++++-------- light/entities.c | 30 ++++++++++----------- light/light.cc | 63 +++++++++++++++++++------------------------ light/ltface.c | 26 +++++++++--------- 4 files changed, 68 insertions(+), 74 deletions(-) diff --git a/include/light/light.h b/include/light/light.h index 1e089e67..6b8db7b0 100644 --- a/include/light/light.h +++ b/include/light/light.h @@ -220,24 +220,25 @@ extern lightsample_t minlight; extern sun_t *suns; +/* command-line options */ + +typedef struct { + vec_t value; + bool locked; +} lockable_vec_t; + /* dirt */ extern qboolean dirty; // should any dirtmapping take place? -extern int dirtMode; -extern float dirtDepth; -extern float dirtScale; -extern float dirtGain; -extern float dirtAngle; +extern lockable_vec_t dirtMode; +extern lockable_vec_t dirtDepth; +extern lockable_vec_t dirtScale; +extern lockable_vec_t dirtGain; +extern lockable_vec_t dirtAngle; extern qboolean globalDirt; // apply dirt to all lights (unless they override it)? extern qboolean minlightDirt; // apply dirt to minlight? -extern qboolean dirtModeSetOnCmdline; -extern qboolean dirtDepthSetOnCmdline; -extern qboolean dirtScaleSetOnCmdline; -extern qboolean dirtGainSetOnCmdline; -extern qboolean dirtAngleSetOnCmdline; - /* bounce */ extern qboolean bounce; diff --git a/light/entities.c b/light/entities.c index 3b3cf147..e7b4bacd 100644 --- a/light/entities.c +++ b/light/entities.c @@ -1117,30 +1117,30 @@ LoadEntities(const bsp2_t *bsp) rangescale); } - if (entity->dirtdepth && !dirtDepthSetOnCmdline) { - dirtDepth = entity->dirtdepth; + if (entity->dirtdepth && !dirtDepth.locked) { + dirtDepth.value = entity->dirtdepth; logprint("Using dirtdepth value %f from worldspawn.\n", - dirtDepth); + dirtDepth.value); } - if (entity->dirtmode && !dirtModeSetOnCmdline) { - dirtMode = entity->dirtmode; + if (entity->dirtmode && !dirtMode.locked) { + dirtMode.value = entity->dirtmode; logprint("Using dirtmode value %i from worldspawn.\n", - dirtMode); + (int)dirtMode.value); } - if (entity->dirtscale && !dirtScaleSetOnCmdline) { - dirtScale = entity->dirtscale; + if (entity->dirtscale && !dirtScale.locked) { + dirtScale.value = entity->dirtscale; logprint("Using dirtscale value %f from worldspawn.\n", - dirtScale); + dirtScale.value); } - if (entity->dirtgain && !dirtGainSetOnCmdline) { - dirtGain = entity->dirtgain; + if (entity->dirtgain && !dirtGain.locked) { + dirtGain.value = entity->dirtgain; logprint("Using dirtgain value %f from worldspawn.\n", - dirtGain); + dirtGain.value); } - if (entity->dirtangle && !dirtAngleSetOnCmdline) { - dirtAngle = entity->dirtangle; + if (entity->dirtangle && !dirtAngle.locked) { + dirtAngle.value = entity->dirtangle; logprint("Using dirtangle value %f from worldspawn.\n", - dirtAngle); + dirtAngle.value); } if (entity->dirt == 1) { globalDirt = true; diff --git a/light/light.cc b/light/light.cc index 6f6bd0b3..2d1105c9 100644 --- a/light/light.cc +++ b/light/light.cc @@ -53,22 +53,15 @@ sun_t *suns = NULL; /* dirt */ qboolean dirty = false; -int dirtMode = 0; -float dirtDepth = 128.0f; -float dirtScale = 1.0f; -float dirtGain = 1.0f; -float dirtAngle = 88.0f; +lockable_vec_t dirtMode = {0, false}; +lockable_vec_t dirtDepth = {128.0f, false}; +lockable_vec_t dirtScale = {1.0f, false}; +lockable_vec_t dirtGain = {1.0f, false}; +lockable_vec_t dirtAngle = {88.0f, false}; qboolean globalDirt = false; qboolean minlightDirt = false; -qboolean dirtSetOnCmdline = false; -qboolean dirtModeSetOnCmdline = false; -qboolean dirtDepthSetOnCmdline = false; -qboolean dirtScaleSetOnCmdline = false; -qboolean dirtGainSetOnCmdline = false; -qboolean dirtAngleSetOnCmdline = false; - /* bounce */ qboolean bounce = false; vec_t bouncescale = 1.0f; @@ -1281,42 +1274,42 @@ main(int argc, const char **argv) debugmode = debugmode_dirt; logprint( "Dirtmap debugging enabled\n" ); } else if ( !strcmp( argv[ i ], "-dirtmode" ) ) { - dirtModeSetOnCmdline = true; - dirtMode = atoi( argv[ ++i ] ); - if ( dirtMode != 0 && dirtMode != 1 ) { - dirtMode = 0; + dirtMode.locked = true; + dirtMode.value = atoi( argv[ ++i ] ); + if ( dirtMode.value != 0 && dirtMode.value != 1 ) { + dirtMode.value = 0; } - if ( dirtMode == 1 ) { + if ( dirtMode.value == 1 ) { logprint( "Enabling randomized dirtmapping\n" ); } else{ logprint( "Enabling ordered dirtmapping\n" ); } } else if ( !strcmp( argv[ i ], "-dirtdepth" ) ) { - dirtDepthSetOnCmdline = true; - dirtDepth = atof( argv[ ++i ] ); - if ( dirtDepth <= 0.0f ) { - dirtDepth = 128.0f; + dirtDepth.locked = true; + dirtDepth.value = atof( argv[ ++i ] ); + if ( dirtDepth.value <= 0.0f ) { + dirtDepth.value = 128.0f; } - logprint( "Dirtmapping depth set to %.1f\n", dirtDepth ); + logprint( "Dirtmapping depth set to %.1f\n", dirtDepth.value ); } else if ( !strcmp( argv[ i ], "-dirtscale" ) ) { - dirtScaleSetOnCmdline = true; - dirtScale = atof( argv[ ++i ] ); - if ( dirtScale <= 0.0f ) { - dirtScale = 1.0f; + dirtScale.locked = true; + dirtScale.value = atof( argv[ ++i ] ); + if ( dirtScale.value <= 0.0f ) { + dirtScale.value = 1.0f; } - logprint( "Dirtmapping scale set to %.1f\n", dirtScale ); + logprint( "Dirtmapping scale set to %.1f\n", dirtScale.value ); } else if ( !strcmp( argv[ i ], "-dirtgain" ) ) { - dirtGainSetOnCmdline = true; - dirtGain = atof( argv[ ++i ] ); - if ( dirtGain <= 0.0f ) { - dirtGain = 1.0f; + dirtGain.locked = true; + dirtGain.value = atof( argv[ ++i ] ); + if ( dirtGain.value <= 0.0f ) { + dirtGain.value = 1.0f; } - logprint( "Dirtmapping gain set to %.1f\n", dirtGain ); + logprint( "Dirtmapping gain set to %.1f\n", dirtGain.value ); } else if ( !strcmp( argv[ i ], "-dirtangle" ) ) { - dirtAngleSetOnCmdline = true; - dirtAngle = atof( argv[ ++i ] ); - logprint( "Dirtmapping cone angle set to %.1f\n", dirtAngle ); + dirtAngle.locked = true; + dirtAngle.value = atof( argv[ ++i ] ); + logprint( "Dirtmapping cone angle set to %.1f\n", dirtAngle.value ); } else if ( !strcmp( argv[ i ], "-bounce" ) ) { bounce = true; logprint( "Bounce enabled on command line\n" ); diff --git a/light/ltface.c b/light/ltface.c index db13f8eb..4749262a 100644 --- a/light/ltface.c +++ b/light/ltface.c @@ -1079,8 +1079,8 @@ Light_ClampMin(lightsample_t *sample, const vec_t light, const vec3_t color) static inline vec_t Dirt_GetScaleFactor(vec_t occlusion, const entity_t *entity, const lightsurf_t *surf) { - vec_t light_dirtgain = dirtGain; - vec_t light_dirtscale = dirtScale; + vec_t light_dirtgain = dirtGain.value; + vec_t light_dirtscale = dirtScale.value; vec_t outDirt; qboolean usedirt; @@ -1726,16 +1726,16 @@ void SetupDirt( void ) { logprint("--- SetupDirt ---\n" ); /* clamp dirtAngle */ - if ( dirtAngle <= 1.0f ) { - dirtAngle = 1.0f; + if ( dirtAngle.value <= 1.0f ) { + dirtAngle.value = 1.0f; } - if ( dirtAngle >= 90.0f) { - dirtAngle = 90.0f; + if ( dirtAngle.value >= 90.0f) { + dirtAngle.value = 90.0f; } /* calculate angular steps */ angleStep = DEG2RAD( 360.0f / DIRT_NUM_ANGLE_STEPS ); - elevationStep = DEG2RAD( dirtAngle / DIRT_NUM_ELEVATION_STEPS ); + elevationStep = DEG2RAD( dirtAngle.value / DIRT_NUM_ELEVATION_STEPS ); /* iterate angle */ angle = 0.0f; @@ -1787,7 +1787,7 @@ DirtForSample(const dmodel_t *model, const vec3_t origin, const vec3_t normal){ /* setup */ gatherDirt = 0.0f; - ooDepth = 1.0f / dirtDepth; + ooDepth = 1.0f / dirtDepth.value; /* check if the normal is aligned to the world-up */ if ( normal[ 0 ] == 0.0f && normal[ 1 ] == 0.0f ) { @@ -1807,12 +1807,12 @@ DirtForSample(const dmodel_t *model, const vec3_t origin, const vec3_t normal){ } /* 1 = random mode, 0 (well everything else) = non-random mode */ - if ( dirtMode == 1 ) { + if ( dirtMode.value == 1 ) { /* iterate */ for ( i = 0; i < numDirtVectors; i++ ) { /* get random vector */ angle = Random() * DEG2RAD( 360.0f ); - elevation = Random() * DEG2RAD( dirtAngle ); + elevation = Random() * DEG2RAD( dirtAngle.value ); temp[ 0 ] = cos( angle ) * sin( elevation ); temp[ 1 ] = sin( angle ) * sin( elevation ); temp[ 2 ] = cos( elevation ); @@ -1823,7 +1823,7 @@ DirtForSample(const dmodel_t *model, const vec3_t origin, const vec3_t normal){ direction[ 2 ] = myRt[ 2 ] * temp[ 0 ] + myUp[ 2 ] * temp[ 1 ] + normal[ 2 ] * temp[ 2 ]; /* set endpoint */ - VectorMA( origin, dirtDepth, direction, traceEnd ); + VectorMA( origin, dirtDepth.value, direction, traceEnd ); /* trace */ if (DirtTrace(origin, traceEnd, model, traceHitpoint, NULL, NULL)) { @@ -1840,7 +1840,7 @@ DirtForSample(const dmodel_t *model, const vec3_t origin, const vec3_t normal){ direction[ 2 ] = myRt[ 2 ] * dirtVectors[ i ][ 0 ] + myUp[ 2 ] * dirtVectors[ i ][ 1 ] + normal[ 2 ] * dirtVectors[ i ][ 2 ]; /* set endpoint */ - VectorMA( origin, dirtDepth, direction, traceEnd ); + VectorMA( origin, dirtDepth.value, direction, traceEnd ); /* trace */ if (DirtTrace(origin, traceEnd, model, traceHitpoint, NULL, NULL)) { @@ -1851,7 +1851,7 @@ DirtForSample(const dmodel_t *model, const vec3_t origin, const vec3_t normal){ } /* direct ray */ - VectorMA( origin, dirtDepth, normal, traceEnd ); + VectorMA( origin, dirtDepth.value, normal, traceEnd ); /* trace */ if (DirtTrace(origin, traceEnd, model, traceHitpoint, NULL, NULL)) {