diff --git a/source/build/src/engine.cpp b/source/build/src/engine.cpp index 27c723701..9892651d8 100644 --- a/source/build/src/engine.cpp +++ b/source/build/src/engine.cpp @@ -7941,7 +7941,7 @@ int32_t drawrooms(int32_t daposx, int32_t daposy, int32_t daposz, case REND_POLYMOST: // NOTE: In Polymost, the fragment depth depends on the x screen size! if (r_usenewshading == 4) - globalvisibility = g_visibility; + globalvisibility = g_visibility * xdimen; else if (r_usenewshading >= 2) globalvisibility = scale(g_visibility<<2, xdimen, 1680); else @@ -7949,7 +7949,10 @@ int32_t drawrooms(int32_t daposx, int32_t daposy, int32_t daposz, break; # ifdef POLYMER case REND_POLYMER: - globalvisibility = g_visibility<<2; + if (r_usenewshading == 4) + globalvisibility = g_visibility; + else + globalvisibility = g_visibility<<2; break; # endif #endif diff --git a/source/build/src/polymer.cpp b/source/build/src/polymer.cpp index 9f2643861..356208bcc 100644 --- a/source/build/src/polymer.cpp +++ b/source/build/src/polymer.cpp @@ -1083,7 +1083,7 @@ void polymer_drawrooms(int32_t daposx, int32_t daposy, int32_t da if (pr_verbosity >= 3) OSD_Printf("PR : Drawing rooms...\n"); - // fogcalc needs this + // fogcalc_old needs this gvisibility = ((float)globalvisibility)*FOGSCALE; ang = (float)(daang) * (360.f/2048.f); @@ -5265,7 +5265,9 @@ static int32_t polymer_bindmaterial(const _prmaterial *material, int16_t* l texunit++; bglUniform1fARB(prprograms[programbits].uniform_shadeOffset, (GLfloat)material->shadeoffset); - bglUniform1fARB(prprograms[programbits].uniform_visibility, globalvisibility/2048.0 * material->visibility); + // the furthest visible point is the same as Polymost, however the fog in Polymer is a sphere insted of a plane + float const visfactor = r_usenewshading == 4 ? 1.f/512.f : 1.f/2048.f; + bglUniform1fARB(prprograms[programbits].uniform_visibility, globalvisibility * visfactor * material->visibility); } // PR_BIT_DIFFUSE_MAP diff --git a/source/build/src/polymost.cpp b/source/build/src/polymost.cpp index c3a4853fe..f0ac48d16 100644 --- a/source/build/src/polymost.cpp +++ b/source/build/src/polymost.cpp @@ -496,7 +496,7 @@ void calc_and_apply_fog(int32_t tile, int32_t shade, int32_t vis, int32_t pal) if (((uint8_t)(vis + 16)) > 0 && g_visibility > 0) { - GLfloat glfogconstant = 262144.f / xdimen; + GLfloat glfogconstant = 262144.f; GLfloat fogrange = (frealmaxshade * glfogconstant) / (((uint8_t)(vis + 16)) * globalvisibility); GLfloat normalizedshade = shade / frealmaxshade; GLfloat fogshade = normalizedshade * fogrange;