Polymost: introduce r_usenewshading 3 and make it the default.

With this mode, the near distance of the linear fog is always 0, unlike being
negative with r_usenewshading 2.

git-svn-id: https://svn.eduke32.com/eduke32@4393 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2014-03-23 23:14:48 +00:00
parent 21de8bb53a
commit 7a3776dfac
4 changed files with 13 additions and 13 deletions

View file

@ -199,7 +199,7 @@ int32_t loadsetup(const char *fn)
if (readconfig(fp, "r_shadescale", val, VL) > 0) if (readconfig(fp, "r_shadescale", val, VL) > 0)
shadescale = clampd(Bstrtod(val, NULL), 0.0, 10.0); shadescale = clampd(Bstrtod(val, NULL), 0.0, 10.0);
if (readconfig(fp, "r_usenewshading", val, VL) > 0) if (readconfig(fp, "r_usenewshading", val, VL) > 0)
r_usenewshading = clamp(atoi_safe(val), 0, 2); r_usenewshading = clamp(atoi_safe(val), 0, 3);
if (readconfig(fp, "r_usetileshades", val, VL) > 0) if (readconfig(fp, "r_usetileshades", val, VL) > 0)
r_usetileshades = !!atoi_safe(val); r_usetileshades = !!atoi_safe(val);
# ifdef POLYMER # ifdef POLYMER

View file

@ -8985,7 +8985,7 @@ int32_t drawrooms(int32_t daposx, int32_t daposy, int32_t daposz,
#ifdef USE_OPENGL #ifdef USE_OPENGL
case REND_POLYMOST: case REND_POLYMOST:
// NOTE: In Polymost, the fragment depth depends on the x screen size! // NOTE: In Polymost, the fragment depth depends on the x screen size!
if (r_usenewshading==2) if (r_usenewshading >= 2)
globalvisibility = scale(g_visibility<<2, xdimen, 1680); globalvisibility = scale(g_visibility<<2, xdimen, 1680);
else else
globalvisibility = scale(g_visibility<<2, xdimen, 1100); globalvisibility = scale(g_visibility<<2, xdimen, 1100);

View file

@ -5096,7 +5096,7 @@ static int32_t polymer_bindmaterial(_prmaterial material, int16_t* lights,
#ifdef PR_LINEAR_FOG #ifdef PR_LINEAR_FOG
if (programbits & prprogrambits[PR_BIT_FOG].bit) if (programbits & prprogrambits[PR_BIT_FOG].bit)
{ {
bglUniform1iARB(prprograms[programbits].uniform_linearFog, r_usenewshading==2); bglUniform1iARB(prprograms[programbits].uniform_linearFog, r_usenewshading >= 2);
} }
#endif #endif
// PR_BIT_GLOW_MAP // PR_BIT_GLOW_MAP

View file

@ -110,7 +110,7 @@ static double dxb1[MAXWALLSB], dxb2[MAXWALLSB];
float shadescale = 1.0f; float shadescale = 1.0f;
int32_t shadescale_unbounded = 0; int32_t shadescale_unbounded = 0;
int32_t r_usenewshading = 2; int32_t r_usenewshading = 3;
int32_t r_usetileshades = 1; int32_t r_usetileshades = 1;
static double gviewxrange, ghoriz; static double gviewxrange, ghoriz;
@ -484,7 +484,7 @@ void polymost_glinit()
////////// VISIBILITY FOG ROUTINES ////////// ////////// VISIBILITY FOG ROUTINES //////////
extern char nofog; // in windows/SDL layers extern char nofog; // in windows/SDL layers
// only for r_usenewshading!=2 (not preferred) // only for r_usenewshading < 2 (not preferred)
static void fogcalc_old(int32_t shade, int32_t vis) static void fogcalc_old(int32_t shade, int32_t vis)
{ {
float f; float f;
@ -526,7 +526,7 @@ static inline void fogcalc(int32_t tile, int32_t shade, int32_t vis, int32_t pal
(!usemodels || md_tilehasmodel(tile, pal) < 0)) (!usemodels || md_tilehasmodel(tile, pal) < 0))
shade >>= 1; shade >>= 1;
if (r_usenewshading!=2) if (r_usenewshading < 2)
{ {
fogcalc_old(shade, vis); fogcalc_old(shade, vis);
return; return;
@ -539,7 +539,7 @@ static inline void fogcalc(int32_t tile, int32_t shade, int32_t vis, int32_t pal
if (combvis == 0) if (combvis == 0)
{ {
if (shade > 0) if (r_usenewshading == 2 && shade > 0)
{ {
// beg = -D*shade, end = D*(NUMSHADES-1-shade) // beg = -D*shade, end = D*(NUMSHADES-1-shade)
// => end/beg = -(NUMSHADES-1-shade)/shade // => end/beg = -(NUMSHADES-1-shade)/shade
@ -555,7 +555,7 @@ static inline void fogcalc(int32_t tile, int32_t shade, int32_t vis, int32_t pal
return; return;
} }
fogresult = -(FOGDISTCONST * shade)/combvis; fogresult = (r_usenewshading == 3) ? 0 : -(FOGDISTCONST * shade)/combvis;
fogresult2 = (FOGDISTCONST * (numshades-1-shade))/combvis; fogresult2 = (FOGDISTCONST * (numshades-1-shade))/combvis;
} }
} }
@ -568,7 +568,7 @@ void calc_and_apply_fog(int32_t tile, int32_t shade, int32_t vis, int32_t pal)
fogcalc(tile, shade, vis, pal); fogcalc(tile, shade, vis, pal);
bglFogfv(GL_FOG_COLOR, fogcol); bglFogfv(GL_FOG_COLOR, fogcol);
if (r_usenewshading!=2) if (r_usenewshading < 2)
{ {
bglFogf(GL_FOG_DENSITY, fogresult); bglFogf(GL_FOG_DENSITY, fogresult);
return; return;
@ -583,12 +583,12 @@ void calc_and_apply_fog_factor(int32_t tile, int32_t shade, int32_t vis, int32_t
if (nofog) if (nofog)
return; return;
// NOTE: for r_usenewshading==2, the fog being/ending distance results are // NOTE: for r_usenewshading >= 2, the fog beginning/ending distance results are
// unused. // unused.
fogcalc(tile, shade, vis, pal); fogcalc(tile, shade, vis, pal);
bglFogfv(GL_FOG_COLOR, fogcol); bglFogfv(GL_FOG_COLOR, fogcol);
if (r_usenewshading!=2) if (r_usenewshading < 2)
{ {
bglFogf(GL_FOG_DENSITY, fogresult*factor); bglFogf(GL_FOG_DENSITY, fogresult*factor);
return; return;
@ -4949,7 +4949,7 @@ int32_t polymost_printext256(int32_t xpos, int32_t ypos, int16_t col, int16_t ba
bglDepthMask(GL_FALSE); // disable writing to the z-buffer bglDepthMask(GL_FALSE); // disable writing to the z-buffer
bglPushAttrib(GL_POLYGON_BIT|GL_ENABLE_BIT); bglPushAttrib(GL_POLYGON_BIT|GL_ENABLE_BIT);
// XXX: Don't fogify the OSD text in Mapster32 with r_usenewshading=2. // XXX: Don't fogify the OSD text in Mapster32 with r_usenewshading >= 2.
bglDisable(GL_FOG); bglDisable(GL_FOG);
// We want to have readable text in wireframe mode, too: // We want to have readable text in wireframe mode, too:
bglPolygonMode(GL_FRONT_AND_BACK, GL_FILL); bglPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
@ -5164,7 +5164,7 @@ void polymost_initosdfuncs(void)
{ "r_texturemaxsize","changes the maximum OpenGL texture size limit",(void *) &gltexmaxsize, CVAR_INT | CVAR_NOSAVE, 0, 4096 }, { "r_texturemaxsize","changes the maximum OpenGL texture size limit",(void *) &gltexmaxsize, CVAR_INT | CVAR_NOSAVE, 0, 4096 },
{ "r_texturemiplevel","changes the highest OpenGL mipmap level used",(void *) &gltexmiplevel, CVAR_INT, 0, 6 }, { "r_texturemiplevel","changes the highest OpenGL mipmap level used",(void *) &gltexmiplevel, CVAR_INT, 0, 6 },
{ "r_texturemode", "changes the texture filtering settings", (void *) &gltexfiltermode, CVAR_INT|CVAR_FUNCPTR, 0, 5 }, { "r_texturemode", "changes the texture filtering settings", (void *) &gltexfiltermode, CVAR_INT|CVAR_FUNCPTR, 0, 5 },
{ "r_usenewshading", "visibility code: 0: Polymost, 2: Classic", (void *) &r_usenewshading, CVAR_INT, 0, 2 }, { "r_usenewshading", "visibility code: 0: Polymost, 2: Classic", (void *) &r_usenewshading, CVAR_INT, 0, 3 },
{ "r_usetileshades", "enable/disable Polymost tile shade textures", (void *) &r_usetileshades, CVAR_INT | CVAR_INVALIDATEART, 0, 2 }, { "r_usetileshades", "enable/disable Polymost tile shade textures", (void *) &r_usetileshades, CVAR_INT | CVAR_INVALIDATEART, 0, 2 },
{ "r_vbocount","sets the number of Vertex Buffer Objects to use when drawing models",(void *) &r_vbocount, CVAR_INT, 1, 256 }, { "r_vbocount","sets the number of Vertex Buffer Objects to use when drawing models",(void *) &r_vbocount, CVAR_INT, 1, 256 },
{ "r_vbos"," enable/disable using Vertex Buffer Objects when drawing models",(void *) &r_vbos, CVAR_BOOL, 0, 1 }, { "r_vbos"," enable/disable using Vertex Buffer Objects when drawing models",(void *) &r_vbos, CVAR_BOOL, 0, 1 },