From 1c5da19874290f9009f87bffd3fd01886935f32e Mon Sep 17 00:00:00 2001 From: helixhorned Date: Thu, 1 May 2014 22:02:21 +0000 Subject: [PATCH] In non-lookup GL modes, if fog is due to fogpal, make fog params indep. of shade. git-svn-id: https://svn.eduke32.com/eduke32@4460 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/build/include/polymost.h | 6 ++++++ polymer/eduke32/build/src/polymer.c | 14 +++++++++----- polymer/eduke32/build/src/polymost.c | 17 ++++++++++------- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/polymer/eduke32/build/include/polymost.h b/polymer/eduke32/build/include/polymost.h index 8d729d08b..da8695281 100644 --- a/polymer/eduke32/build/include/polymost.h +++ b/polymer/eduke32/build/include/polymost.h @@ -87,6 +87,12 @@ static inline int32_t get_ceiling_fogpal(const sectortype *sec) { return POLYMOST_CHOOSE_FOG_PAL(sec->fogpal, sec->ceilingpal); } +static inline int32_t fogpal_shade(const sectortype *sec, int32_t shade) +{ + // When fogging is due to sector[].fogpal, don't make the fog parameters + // depend on the shade of the object. + return sec->fogpal ? 0 : shade; +} typedef struct pthtyp_t { diff --git a/polymer/eduke32/build/src/polymer.c b/polymer/eduke32/build/src/polymer.c index ab6170496..94ab87c49 100644 --- a/polymer/eduke32/build/src/polymer.c +++ b/polymer/eduke32/build/src/polymer.c @@ -1377,7 +1377,7 @@ void polymer_drawmaskwall(int32_t damaskwallcnt) w->mask.material.diffusemodulation[2] = ((GLubyte *)(&maskwall[damaskwallcnt]))[1]; w->mask.material.diffusemodulation[3] = 0xFF; } else { - calc_and_apply_fog(wal->picnum, wal->shade, sec->visibility, get_floor_fogpal(sec)); + calc_and_apply_fog(wal->picnum, fogpal_shade(sec, wal->shade), sec->visibility, get_floor_fogpal(sec)); } polymer_drawplane(&w->mask); @@ -1394,6 +1394,7 @@ void polymer_drawsprite(int32_t snum) _prsprite *s; spritetype *const tspr = tspriteptr[snum]; + const sectortype *sec; if (pr_verbosity >= 3) OSD_Printf("PR : Sprite %i...\n", snum); @@ -1408,7 +1409,8 @@ void polymer_drawsprite(int32_t snum) DO_TILE_ANIM(tspr->picnum, tspr->owner+32768); - calc_and_apply_fog(tspr->picnum, tspr->shade, sector[tspr->sectnum].visibility, + sec = §or[tspr->sectnum]; + calc_and_apply_fog(tspr->picnum, fogpal_shade(sec, tspr->shade), sec->visibility, get_floor_fogpal(§or[tspr->sectnum])); if (usemodels && tile2model[Ptile2tile(tspr->picnum,tspr->pal)].modelid >= 0 && @@ -2721,7 +2723,8 @@ static void polymer_drawsector(int16_t sectnum, int32_t domasks) s->floor.material.diffusemodulation[2] = ((GLubyte *)(§num))[1]; s->floor.material.diffusemodulation[3] = 0xFF; } else { - calc_and_apply_fog(sec->floorpicnum, sec->floorshade, sec->visibility, get_floor_fogpal(sec)); + calc_and_apply_fog(sec->floorpicnum, fogpal_shade(sec, sec->floorshade), + sec->visibility, get_floor_fogpal(sec)); } polymer_drawplane(&s->floor); @@ -2756,7 +2759,8 @@ static void polymer_drawsector(int16_t sectnum, int32_t domasks) s->ceil.material.diffusemodulation[2] = ((GLubyte *)(§num))[1]; s->ceil.material.diffusemodulation[3] = 0xFF; } else { - calc_and_apply_fog(sec->ceilingpicnum, sec->ceilingshade, sec->visibility, get_ceiling_fogpal(sec)); + calc_and_apply_fog(sec->ceilingpicnum, fogpal_shade(sec, sec->ceilingshade), + sec->visibility, get_ceiling_fogpal(sec)); } polymer_drawplane(&s->ceil); @@ -3276,7 +3280,7 @@ static void polymer_drawwall(int16_t sectnum, int16_t wallnum) (sector[wal->nextsector].ceilingstat & 1)) parallaxedceiling = 1; - calc_and_apply_fog(wal->picnum, wal->shade, sec->visibility, get_floor_fogpal(sec)); + calc_and_apply_fog(wal->picnum, fogpal_shade(sec, wal->shade), sec->visibility, get_floor_fogpal(sec)); if ((w->underover & 1) && (!parallaxedfloor || (searchit == 2))) { diff --git a/polymer/eduke32/build/src/polymost.c b/polymer/eduke32/build/src/polymost.c index 5a2c890e6..e1a289fdb 100644 --- a/polymer/eduke32/build/src/polymost.c +++ b/polymer/eduke32/build/src/polymost.c @@ -2251,7 +2251,7 @@ static void polymost_internal_nonparallaxed(double nx0, double ny0, double nx1, if (globalposz <= getceilzofslope(sectnum,globalposx,globalposy)) domostpolymethod = -1; //Back-face culling } - calc_and_apply_fog(globalpicnum, global_cf_shade, sec->visibility, + calc_and_apply_fog(globalpicnum, fogpal_shade(sec, global_cf_shade), sec->visibility, POLYMOST_CHOOSE_FOG_PAL(global_cf_fogpal, global_cf_pal)); pow2xsplit = 0; @@ -2982,7 +2982,7 @@ static void polymost_drawalls(int32_t bunch) } if (wal->cstat&256) { gvx = -gvx; gvy = -gvy; gvo = -gvo; } //yflip - calc_and_apply_fog(wal->picnum, wal->shade, sec->visibility, get_floor_fogpal(sec)); + calc_and_apply_fog(wal->picnum, fogpal_shade(sec, wal->shade), sec->visibility, get_floor_fogpal(sec)); pow2xsplit = 1; domost(x1,ocy1,x0,ocy0); if (wal->cstat&8) { gux = ogux; guy = oguy; guo = oguo; } @@ -3017,7 +3017,7 @@ static void polymost_drawalls(int32_t bunch) } if (nwal->cstat&256) { gvx = -gvx; gvy = -gvy; gvo = -gvo; } //yflip - calc_and_apply_fog(nwal->picnum, nwal->shade, sec->visibility, get_floor_fogpal(sec)); + calc_and_apply_fog(nwal->picnum, fogpal_shade(sec, nwal->shade), sec->visibility, get_floor_fogpal(sec)); pow2xsplit = 1; domost(x0,ofy0,x1,ofy1); if (wal->cstat&(2+8)) { guo = oguo; gux = ogux; guy = oguy; } @@ -3048,7 +3048,7 @@ static void polymost_drawalls(int32_t bunch) } if (wal->cstat&256) { gvx = -gvx; gvy = -gvy; gvo = -gvo; } //yflip - calc_and_apply_fog(wal->picnum, wal->shade, sec->visibility, get_floor_fogpal(sec)); + calc_and_apply_fog(wal->picnum, fogpal_shade(sec, wal->shade), sec->visibility, get_floor_fogpal(sec)); pow2xsplit = 1; domost(x0,-10000,x1,-10000); } @@ -3604,7 +3604,7 @@ void polymost_drawmaskwall(int32_t damaskwallcnt) method = 1; pow2xsplit = 1; if (wal->cstat&128) { if (!(wal->cstat&512)) method = 2; else method = 3; } - calc_and_apply_fog(wal->picnum, wal->shade, sec->visibility, get_floor_fogpal(sec)); + calc_and_apply_fog(wal->picnum, fogpal_shade(sec, wal->shade), sec->visibility, get_floor_fogpal(sec)); for (i=0; i<2; i++) { @@ -3687,6 +3687,8 @@ void polymost_drawsprite(int32_t snum) int32_t tsizx, tsizy; spritetype *const tspr = tspriteptr[snum]; + const sectortype *sec; + if (bad_tspr(tspr)) return; @@ -3716,8 +3718,9 @@ void polymost_drawsprite(int32_t snum) alpha = spriteext[spritenum].alpha; #ifdef USE_OPENGL - calc_and_apply_fog(tspr->picnum, globalshade, sector[tspr->sectnum].visibility, - get_floor_fogpal(§or[tspr->sectnum])); + sec = §or[tspr->sectnum]; + calc_and_apply_fog(tspr->picnum, fogpal_shade(sec, globalshade), + sec->visibility, get_floor_fogpal(sec)); while (getrendermode() >= REND_POLYMOST && !(spriteext[spritenum].flags&SPREXT_NOTMD)) {