mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 11:10:47 +00:00
Patch from Fox:
Polymost visibility: compensate for the classic mode "truncating" the lookup shades by moving the fog ramp by the equivalent of 1/2 shade Fix some issues with negative shade in GL fog. git-svn-id: https://svn.eduke32.com/eduke32@7712 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
ff4449638e
commit
fe2fe0c2cf
1 changed files with 14 additions and 13 deletions
|
@ -947,7 +947,7 @@ void polymost_glinit()
|
|||
texCoord = clamp(u_texturePosSize.zw*texCoord, u_halfTexelSize, u_texturePosSize.zw-u_halfTexelSize);\n\
|
||||
vec4 color = texture2D(s_texture, u_texturePosSize.xy+texCoord);\n\
|
||||
\n\
|
||||
float shade = clamp((u_shade+u_visFactor*v_distance), c_zero, u_numShades-c_one);\n\
|
||||
float shade = clamp((u_shade+max(u_visFactor*v_distance-0.5*u_shadeInterpolate,c_zero)), c_zero, u_numShades-c_one);\n\
|
||||
float shadeFrac = mod(shade, c_one);\n\
|
||||
float colorIndex = texture2D(s_palswap, u_palswapPos+u_palswapSize*vec2(color.r, floor(shade)/u_numShades)).r;\n\
|
||||
colorIndex = c_basepalOffset + c_basepalScale*colorIndex;\n\
|
||||
|
@ -1043,7 +1043,7 @@ void polymost_glinit()
|
|||
texCoord = clamp(u_texturePosSize.zw*texCoord, u_halfTexelSize, u_texturePosSize.zw-u_halfTexelSize);\n\
|
||||
vec4 color = texture2D(s_texture, u_texturePosSize.xy+texCoord);\n\
|
||||
\n\
|
||||
float shade = clamp((u_shade+u_visFactor*v_distance), c_zero, u_numShades-c_one);\n\
|
||||
float shade = clamp((u_shade+max(u_visFactor*v_distance-0.5*u_shadeInterpolate,c_zero)), c_zero, u_numShades-c_one);\n\
|
||||
float shadeFrac = mod(shade, c_one);\n\
|
||||
float colorIndex = texture2D(s_palswap, u_palswapPos+u_palswapSize*vec2(color.r, floor(shade)/u_numShades)).r;\n\
|
||||
colorIndex = c_basepalOffset + c_basepalScale*colorIndex;\n\
|
||||
|
@ -1211,22 +1211,22 @@ void polymost2_calc_fog(int32_t shade, int32_t vis, int32_t pal)
|
|||
{
|
||||
if (nofog) return;
|
||||
|
||||
fogresult = 0.f;
|
||||
fogcol = fogtable[pal];
|
||||
|
||||
if (((uint8_t)(vis + 16)) > 0 && g_visibility > 0)
|
||||
{
|
||||
constexpr GLfloat glfogconstant = 262144.f;
|
||||
GLfloat fogrange = (frealmaxshade * glfogconstant) / (((uint8_t)(vis + 16)) * globalvisibility);
|
||||
GLfloat normalizedshade = shade / frealmaxshade;
|
||||
GLfloat fogshade = normalizedshade * fogrange;
|
||||
|
||||
// fogresult = -fogshade; // uncomment this to incorporate shades in the fog
|
||||
fogresult2 = fogrange - fogshade;
|
||||
fogresult = 0.f - (((min(shade, 0) - 0.5f) / frealmaxshade) * fogrange); // min() = subtract shades from fog
|
||||
fogresult2 = fogrange - (((shade - 0.5f) / frealmaxshade) * fogrange);
|
||||
}
|
||||
else
|
||||
{
|
||||
fogresult = 0.f;
|
||||
fogresult2 = -GL_FOG_MAX; // hide fog behind the camera
|
||||
}
|
||||
}
|
||||
|
||||
void calc_and_apply_fog(int32_t shade, int32_t vis, int32_t pal)
|
||||
{
|
||||
|
@ -1241,14 +1241,15 @@ void calc_and_apply_fog(int32_t shade, int32_t vis, int32_t pal)
|
|||
{
|
||||
constexpr GLfloat glfogconstant = 262144.f;
|
||||
GLfloat fogrange = (frealmaxshade * glfogconstant) / (((uint8_t)(vis + 16)) * globalvisibility);
|
||||
GLfloat normalizedshade = shade / frealmaxshade;
|
||||
GLfloat fogshade = normalizedshade * fogrange;
|
||||
|
||||
// fogresult = -fogshade; // uncomment this to incorporate shades in the fog
|
||||
fogresult2 = fogrange - fogshade;
|
||||
fogresult = 0.f - (((min(shade, 0) - 0.5f) / frealmaxshade) * fogrange); // min() = subtract shades from fog
|
||||
fogresult2 = fogrange - (((shade - 0.5f) / frealmaxshade) * fogrange);
|
||||
}
|
||||
else
|
||||
{
|
||||
fogresult = 0.f;
|
||||
fogresult2 = -GL_FOG_MAX; // hide fog behind the camera
|
||||
}
|
||||
|
||||
glFogf(GL_FOG_START, fogresult);
|
||||
glFogf(GL_FOG_END, fogresult2);
|
||||
|
@ -1279,11 +1280,11 @@ void calc_and_apply_fog_factor(int32_t shade, int32_t vis, int32_t pal, float fa
|
|||
|
||||
if (((uint8_t)(vis + 16)) > 0 && ((((uint8_t)(vis + 16)) / 8.f) + shade) > 0)
|
||||
{
|
||||
GLfloat normalizedshade = shade / frealmaxshade;
|
||||
GLfloat normalizedshade = (shade - 0.5f) / frealmaxshade;
|
||||
GLfloat fogrange = (((uint8_t)(vis + 16)) / (8.f * frealmaxshade)) + normalizedshade;
|
||||
|
||||
// subtract shades from fog
|
||||
if (shade > 0 && shade < realmaxshade)
|
||||
if (normalizedshade > 0.f && normalizedshade < 1.f)
|
||||
fogrange = (fogrange - normalizedshade) / (1.f - normalizedshade);
|
||||
|
||||
fogresult = -(GL_FOG_MAX * fogrange);
|
||||
|
|
Loading…
Reference in a new issue