Revert "- reworked fog uniforms to move the global fog mode setting to the viewpoint buffer."

This reverts commit 8b26b6dd1e.

This was causing problems with light mode 2 because some edge cases were no longer handled properly.
This commit is contained in:
Christoph Oelckers 2018-09-16 22:38:20 +02:00
parent 4c13a8df6e
commit bc1e659c7b
9 changed files with 32 additions and 19 deletions

View file

@ -144,7 +144,6 @@ void GLViewpointBuffer::Set2D(int width, int height)
HWViewpointUniforms matrices;
matrices.SetDefaults();
matrices.mProjectionMatrix.ortho(0, width, height, 0, -1.0f, 1.0f);
matrices.mFogEnabled = 3;
matrices.CalcDependencies();
Map();
memcpy(mBufferPointer, &matrices, sizeof(matrices));

View file

@ -133,15 +133,31 @@ bool FRenderState::ApplyShader()
activeShader->Bind();
}
int fogset = 0;
if (mFogEnabled)
{
if (mFogEnabled == 2)
{
fogset = -3; // 2D rendering with 'foggy' overlay.
}
else if ((mFogColor & 0xffffff) == 0)
{
fogset = gl_fogmode;
}
else
{
fogset = -gl_fogmode;
}
}
glVertexAttrib4fv(VATTR_COLOR, mColor.vec);
glVertexAttrib4fv(VATTR_NORMAL, mNormal.vec);
activeShader->muDesaturation.Set(mDesaturation / 255.f);
activeShader->muFogEnabled.Set(fogset);
activeShader->muTextureMode.Set(mTextureMode == TM_MODULATE && mTempTM == TM_OPAQUE ? TM_OPAQUE : mTextureMode);
float fds = mLightParms[2];
if (!mFogEnabled) mLightParms[2] = 0;
activeShader->muLightParms.Set(mLightParms);
mLightParms[2] = fds;
activeShader->muFogColor.Set(mFogColor);
activeShader->muObjectColor.Set(mObjectColor);
activeShader->muObjectColor2.Set(mObjectColor2);

View file

@ -375,7 +375,6 @@ void FDrawInfo::DrawEndScene2D(sector_t * viewsector)
HWViewpointUniforms vp = VPUniforms;
vp.mViewMatrix.loadIdentity();
vp.mProjectionMatrix = vrmode->GetHUDSpriteProjection();
vp.mFogEnabled = 0;
GLRenderer->mViewpoints->SetViewpoint(&vp);
glDisable(GL_DEPTH_TEST);
glDisable(GL_MULTISAMPLE);

View file

@ -68,8 +68,6 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
int uViewHeight; // Software fuzz scaling
float uClipHeight;
float uClipHeightDirection;
int uFogEnabled;
};
)";
@ -100,6 +98,7 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
i_data += "#define uFogDensity uLightAttr.b\n";
i_data += "#define uLightFactor uLightAttr.g\n";
i_data += "#define uLightDist uLightAttr.r\n";
i_data += "uniform int uFogEnabled;\n";
// dynamic lights
i_data += "uniform int uLightIndex;\n";
@ -331,6 +330,7 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
muDesaturation.Init(hShader, "uDesaturationFactor");
muFogEnabled.Init(hShader, "uFogEnabled");
muTextureMode.Init(hShader, "uTextureMode");
muLightParms.Init(hShader, "uLightAttr");
muClipSplit.Init(hShader, "uClipSplit");

View file

@ -242,6 +242,7 @@ class FShader
FName mName;
FBufferedUniform1f muDesaturation;
FBufferedUniform1i muFogEnabled;
FBufferedUniform1i muTextureMode;
FBufferedUniform4f muLightParms;
FBufferedUniform2f muClipSplit;

View file

@ -280,6 +280,5 @@ void HWViewpointUniforms::SetDefaults()
mGlobVis = (float)R_GetGlobVis(r_viewwindow, r_visibility) / 32.f;
mPalLightLevels = static_cast<int>(gl_bandedswlight) | (static_cast<int>(gl_fogmode) << 8);
mClipLine.X = -10000000.0f;
mFogEnabled = gl_fogmode;
}

View file

@ -16,7 +16,6 @@ struct HWViewpointUniforms
int mViewHeight = 0;
float mClipHeight = 0.f;
float mClipHeightDirection = 0.f;
int mFogEnabled = 0;
void CalcDependencies()
{

View file

@ -15,7 +15,7 @@ void main()
//
// calculate fog factor
//
if (uFogEnabled == 1)
if (uFogEnabled == -1)
{
fogdist = pixelpos.w;
}

View file

@ -358,7 +358,7 @@ vec4 getLightColor(Material material, float fogdist, float fogfactor)
float newlightlevel = 1.0 - R_DoomLightingEquation(uLightLevel);
color.rgb *= newlightlevel;
}
else if (uFogColor.rgb == vec3(0.0))
else if (uFogEnabled > 0)
{
// brightening around the player for light mode 2
if (fogdist < uLightDist)
@ -421,7 +421,7 @@ vec3 AmbientOcclusionColor()
//
// calculate fog factor
//
if (uFogEnabled == 1)
if (uFogEnabled == -1)
{
fogdist = pixelpos.w;
}
@ -449,17 +449,17 @@ void main()
if (frag.a <= uAlphaThreshold) discard;
#endif
if (uFogEnabled != 3) // check for special 2D 'fog' mode.
if (uFogEnabled != -3) // check for special 2D 'fog' mode.
{
float fogdist = 0.0;
float fogfactor = 1.0;
float fogfactor = 0.0;
//
// calculate fog factor
//
if (uFogEnabled != 0 && uFogDensity != 0)
if (uFogEnabled != 0)
{
if (uFogEnabled == 1)
if (uFogEnabled == 1 || uFogEnabled == -1)
{
fogdist = pixelpos.w;
}
@ -476,7 +476,7 @@ void main()
//
// colored fog
//
if (uFogColor.rgb != vec3(0.0))
if (uFogEnabled < 0)
{
frag = applyFog(frag, fogfactor);
}