Skip to content

Commit

Permalink
renderer2: globalfog bugfix fog on/off at certain areas/orientations/…
Browse files Browse the repository at this point in the history
…angles
  • Loading branch information
rafal1137 committed May 15, 2024
1 parent dfbb2c9 commit 47b1f97
Show file tree
Hide file tree
Showing 7 changed files with 10 additions and 7 deletions.
1 change: 0 additions & 1 deletion src/renderer2/glsl/fogGlobal_fp.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ void main()
float depth = texture2D(u_DepthMap, st).r;
// scale to Normalized Device Coordinates
vec4 P = vec4(gl_FragCoord.xy, depth, 1.0) * 2.0 - 1.0;
//! vec4 P = vec4(gl_FragCoord.xy, depth, 1.0);
// unproject to get into viewspace
P = u_UnprojectMatrix * P;
// normalize to homogeneous coordinates
Expand Down
2 changes: 2 additions & 0 deletions src/renderer2/glsl/volumetricFog_fp.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,14 @@ void main()
// reconstruct vertex position in world space
// scale to NDC (Normalized Device Coordinates) space
vec4 posBack = vec4(gl_FragCoord.xy, depthBack, 1.0) * 2.0 - 1.0;
//vec4 posBack = vec4(gl_FragCoord.xy, depthBack, 1.0);
// unproject to get into viewspace
posBack = u_UnprojectMatrix * posBack;
// normalize to homogeneous coordinates (where w is always 1)
posBack.xyz /= posBack.w;

vec4 posFront = vec4(gl_FragCoord.xy, depthFront, 1.0) * 2.0 - 1.0;
//vec4 posFront = vec4(gl_FragCoord.xy, depthFront, 1.0);
posFront = u_UnprojectMatrix * posFront;
// we might be in the volume.
// In that case the volume front plane is behind you, and w becomes negative
Expand Down
2 changes: 1 addition & 1 deletion src/renderer2/tr_backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -2414,7 +2414,7 @@ void RB_RenderGlobalFog()
}

// no fog pass in snooper
if ((tr.refdef.rdflags & RDF_SNOOPERVIEW) || tess.surfaceShader->noFog)
if ((tr.refdef.rdflags & RDF_SNOOPERVIEW))
{
return;
}
Expand Down
8 changes: 5 additions & 3 deletions src/renderer2/tr_bsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -4557,6 +4557,7 @@ static void R_LoadFogs(lump_t *l, lump_t *brushesLump, lump_t *sidesLump)
int planeNum;
shader_t *shader;
int firstSide;
float d;

Ren_Print("...loading fogs\n");

Expand Down Expand Up @@ -4664,15 +4665,16 @@ static void R_LoadFogs(lump_t *l, lump_t *brushesLump, lump_t *sidesLump)
VectorCopy(shader->fogParms.color, out->color);
out->color[3] = 1.0;
out->density = shader->fogParms.density;
out->depthForOpaque = shader->fogParms.depthForOpaque; // < 1.0f ? 1.0f : shader->fogParms.depthForOpaque;
out->tcScale = rcp(shader->fogParms.depthForOpaque);
d = shader->fogParms.depthForOpaque < 1.0f ? 1.0f : shader->fogParms.depthForOpaque;
out->depthForOpaque = d; // shader->fogParms.depthForOpaque; // < 1.0f ? 1.0f : shader->fogParms.depthForOpaque;
out->tcScale = rcp(d); // rcp(shader->fogParms.depthForOpaque);

// global fog sets clearcolor/zfar
if (out->originalBrushNumber == -1)
{
s_worldData.globalFog = i + 1;
VectorCopy(shader->fogParms.color, s_worldData.globalOriginalFog);
s_worldData.globalOriginalFog[3] = shader->fogParms.depthForOpaque;
s_worldData.globalOriginalFog[3] = d; // shader->fogParms.depthForOpaque;
}

// set the gradient vector
Expand Down
1 change: 1 addition & 0 deletions src/renderer2/tr_fog.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ void RE_SetGlobalFog(qboolean restore, int duration, float r, float g, float b,
tr.glfogsettings[FOG_TARGET].end = tr.world->fogs[tr.world->globalFog].depthForOpaque;
tr.glfogsettings[FOG_TARGET].density = tr.world->fogs[tr.world->globalFog].density;
tr.glfogsettings[FOG_TARGET].finishTime = tr.refdef.time;
tr.glfogsettings[FOG_TARGET].mode = GL_LINEAR;
tr.glfogsettings[FOG_TARGET].registered = qtrue;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/renderer2/tr_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1866,7 +1866,7 @@ void RE_Shutdown(qboolean destroyWindow)
{
int j;
bspNode_t *node;
trRefLight_t *light;
//trRefLight_t *light;

for (j = 0; j < tr.world->numnodes; j++)
{
Expand Down
1 change: 0 additions & 1 deletion src/renderer2/tr_local.h
Original file line number Diff line number Diff line change
Expand Up @@ -4487,7 +4487,6 @@ FOG, tr_fog.c
//void RB_FogOn();
void RE_SetFog(int fogvar, int var1, int var2, float r, float g, float b, float density);
void RE_SetGlobalFog(qboolean restore, int duration, float r, float g, float b, float depthForOpaque);
void RE_SetGlobalFog_(qboolean restore, int fog);
void R_SetFrameFog();

/*
Expand Down

0 comments on commit 47b1f97

Please sign in to comment.