mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-28 06:53:40 +00:00
- reworked fog uniforms to move the global fog mode setting to the viewpoint buffer.
This commit is contained in:
parent
7cbc98e1d0
commit
8b26b6dd1e
9 changed files with 19 additions and 32 deletions
|
@ -144,6 +144,7 @@ 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));
|
||||
|
|
|
@ -119,7 +119,7 @@ bool FRenderState::ApplyShader()
|
|||
static uint64_t firstFrame = 0;
|
||||
// if firstFrame is not yet initialized, initialize it to current time
|
||||
// if we're going to overflow a float (after ~4.6 hours, or 24 bits), re-init to regain precision
|
||||
if ((firstFrame == 0) || (screen->FrameTime - firstFrame >= 1<<24) || level.ShaderStartTime >= firstFrame)
|
||||
if ((firstFrame == 0) || (screen->FrameTime - firstFrame >= 1 << 24) || level.ShaderStartTime >= firstFrame)
|
||||
firstFrame = screen->FrameTime;
|
||||
|
||||
static const float nulvec[] = { 0.f, 0.f, 0.f, 0.f };
|
||||
|
@ -133,31 +133,15 @@ 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);
|
||||
|
|
|
@ -375,6 +375,7 @@ 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);
|
||||
|
|
|
@ -68,6 +68,8 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
|
|||
int uViewHeight; // Software fuzz scaling
|
||||
float uClipHeight;
|
||||
float uClipHeightDirection;
|
||||
int uFogEnabled;
|
||||
|
||||
};
|
||||
)";
|
||||
|
||||
|
@ -98,7 +100,6 @@ 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";
|
||||
|
@ -330,7 +331,6 @@ 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");
|
||||
|
|
|
@ -242,7 +242,6 @@ class FShader
|
|||
FName mName;
|
||||
|
||||
FBufferedUniform1f muDesaturation;
|
||||
FBufferedUniform1i muFogEnabled;
|
||||
FBufferedUniform1i muTextureMode;
|
||||
FBufferedUniform4f muLightParms;
|
||||
FBufferedUniform2f muClipSplit;
|
||||
|
|
|
@ -280,5 +280,6 @@ 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;
|
||||
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ struct HWViewpointUniforms
|
|||
int mViewHeight = 0;
|
||||
float mClipHeight = 0.f;
|
||||
float mClipHeightDirection = 0.f;
|
||||
int mFogEnabled = 0;
|
||||
|
||||
void CalcDependencies()
|
||||
{
|
||||
|
|
|
@ -15,7 +15,7 @@ void main()
|
|||
//
|
||||
// calculate fog factor
|
||||
//
|
||||
if (uFogEnabled == -1)
|
||||
if (uFogEnabled == 1)
|
||||
{
|
||||
fogdist = pixelpos.w;
|
||||
}
|
||||
|
|
|
@ -358,7 +358,7 @@ vec4 getLightColor(Material material, float fogdist, float fogfactor)
|
|||
float newlightlevel = 1.0 - R_DoomLightingEquation(uLightLevel);
|
||||
color.rgb *= newlightlevel;
|
||||
}
|
||||
else if (uFogEnabled > 0)
|
||||
else if (uFogColor.rgb == vec3(0.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 = 0.0;
|
||||
float fogfactor = 1.0;
|
||||
|
||||
//
|
||||
// calculate fog factor
|
||||
//
|
||||
if (uFogEnabled != 0)
|
||||
if (uFogEnabled != 0 && uFogDensity != 0)
|
||||
{
|
||||
if (uFogEnabled == 1 || uFogEnabled == -1)
|
||||
if (uFogEnabled == 1)
|
||||
{
|
||||
fogdist = pixelpos.w;
|
||||
}
|
||||
|
@ -476,7 +476,7 @@ void main()
|
|||
//
|
||||
// colored fog
|
||||
//
|
||||
if (uFogEnabled < 0)
|
||||
if (uFogColor.rgb != vec3(0.0))
|
||||
{
|
||||
frag = applyFog(frag, fogfactor);
|
||||
}
|
||||
|
@ -494,7 +494,7 @@ void main()
|
|||
vec4 cm = (uObjectColor + gray * (uObjectColor2 - uObjectColor)) * 2;
|
||||
frag = vec4(clamp(cm.rgb, 0.0, 1.0), frag.a);
|
||||
}
|
||||
frag = frag * ProcessLight(material, vColor);
|
||||
frag = frag * ProcessLight(material, vColor);
|
||||
frag.rgb = frag.rgb + uFogColor.rgb;
|
||||
}
|
||||
FragColor = frag;
|
||||
|
|
Loading…
Reference in a new issue