light: refactor dirt*SetOnCmdline variables

This commit is contained in:
Eric Wasylishen 2016-05-27 15:22:32 -06:00
parent 35e92abfcf
commit 30673903ed
4 changed files with 68 additions and 74 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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" );

View File

@ -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)) {