Optimise uLightLevel

This commit is contained in:
Emile Belanger 2021-03-09 20:05:06 +00:00
parent 36f2420c32
commit 7a2ee8acdb
4 changed files with 8 additions and 4 deletions

View file

@ -169,6 +169,7 @@ bool FGLRenderState::ApplyShader()
}
flavour.doDesaturate = mStreamData.uDesaturationFactor != 0;
flavour.useULightLevel = (mLightParms[3] >= 0); //#define uLightLevel uLightAttr.a
// Yes create shaders for all combinations of active lights to avoid more branches
flavour.dynLightsMod = (modLights > 0);

View file

@ -664,6 +664,7 @@ bool FShader::Bind(ShaderFlavourData& flavour)
variantConfig.AppendFormat("#define DEF_FOG_ENABLED %d\n", flavour.fogEnabled);
variantConfig.AppendFormat("#define DEF_FOG_RADIAL %d\n", flavour.fogEquationRadial);
variantConfig.AppendFormat("#define DEF_FOG_COLOURED %d\n", flavour.colouredFog);
variantConfig.AppendFormat("#define DEF_USE_U_LIGHT_LEVEL %d\n", flavour.useULightLevel);
variantConfig.AppendFormat("#define DEF_DO_DESATURATE %d\n", flavour.doDesaturate);
variantConfig.AppendFormat("#define DEF_DYNAMIC_LIGHTS_MOD %d\n", flavour.dynLightsMod);

View file

@ -263,6 +263,7 @@ public:
bool dynLightsMod;
bool dynLightsSub;
bool dynLightsAdd;
bool useULightLevel;
};
class FShader
@ -391,6 +392,7 @@ public:
tag |= (flavour.dynLightsMod & 1) << 12;
tag |= (flavour.dynLightsSub & 1) << 13;
tag |= (flavour.dynLightsAdd & 1) << 14;
tag |= (flavour.useULightLevel & 1) << 15;
return tag;
}

View file

@ -313,12 +313,12 @@ vec4 getLightColor(Material material, float fogdist, float fogfactor)
{
vec4 color = vColor;
if (uLightLevel >= 0.0)
#if (DEF_USE_U_LIGHT_LEVEL == 1)
{
float newlightlevel = 1.0 - R_DoomLightingEquation(uLightLevel);
color.rgb *= newlightlevel;
}
else
#else
{
#if (DEF_FOG_ENABLED == 1) && (DEF_FOG_COLOURED == 0)
@ -336,7 +336,7 @@ vec4 getLightColor(Material material, float fogdist, float fogfactor)
}
#endif
}
#endif
//
// handle glowing walls
//