From 2afb680d224313f6c94265368ff3a99a202849ac Mon Sep 17 00:00:00 2001 From: helixhorned Date: Wed, 19 Feb 2014 19:47:28 +0000 Subject: [PATCH] engine.c: always setup blending table whenever drawing translucent objects. BUILD_LUNATIC. git-svn-id: https://svn.eduke32.com/eduke32@4338 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/build/src/engine.c | 51 +++++++++++++++--------------- polymer/eduke32/source/game.c | 1 - 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/polymer/eduke32/build/src/engine.c b/polymer/eduke32/build/src/engine.c index d562a1c33..f5011311b 100644 --- a/polymer/eduke32/build/src/engine.c +++ b/polymer/eduke32/build/src/engine.c @@ -3604,6 +3604,23 @@ static int32_t setup_globals_cf1(const sectortype *sec, int32_t pal, int32_t zd, return 0; } +static void setup_blend(int32_t blend, int32_t doreverse) +{ + if (blendtable[blend] == NULL) + blend = 0; + + if (globalblend != blend) + { + globalblend = blend; + fixtransluscence(FP_OFF(getblendtab(blend))); + } + + if (doreverse) + settransreverse(); + else + settransnormal(); +} + // // ceilscan (internal) // @@ -3658,11 +3675,11 @@ static void ceilscan(int32_t x1, int32_t x2, int32_t sectnum) msethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); break; case 256: - settransnormal(); + setup_blend(0, 0); tsethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); break; case 384: - settransreverse(); + setup_blend(0, 0); tsethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); break; } @@ -3753,11 +3770,11 @@ static void florscan(int32_t x1, int32_t x2, int32_t sectnum) msethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); break; case 256: - settransnormal(); + setup_blend(0, 0); tsethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); break; case 384: - settransreverse(); + setup_blend(0, 1); tsethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); break; } @@ -5589,18 +5606,6 @@ static void drawsprite_opengl(int32_t snum) //============================================================================= //POLYMOST ENDS } -static void setup_blend(int32_t blend) -{ - if (blendtable[blend] == NULL) - blend = 0; - - if (globalblend != blend) - { - globalblend = blend; - fixtransluscence(FP_OFF(getblendtab(blend))); - } -} - static void drawsprite_classic(int32_t snum) { int32_t xoff, yoff, xspan, yspan; @@ -5680,12 +5685,8 @@ static void drawsprite_classic(int32_t snum) if (palookup[globalpal] == NULL) globalpal = 0; // JBF: fixes null-pointer crash globalshade = tspr->shade; - setup_blend(tspr->blend); - if (cstat&2) - { - if (cstat&512) settransreverse(); else settransnormal(); - } + setup_blend(tspr->blend, cstat&512); xoff = picanm[tilenum].xofs + tspr->xoffset; yoff = picanm[tilenum].yofs + tspr->yoffset; @@ -6693,9 +6694,7 @@ static void drawmaskwall(int16_t damaskwallcnt) else { if (globalorientation&128) - { - if (globalorientation&512) settransreverse(); else settransnormal(); - } + setup_blend(0, globalorientation&512); transmaskwallscan(xb1[z],xb2[z], 0); } @@ -7713,7 +7712,7 @@ static void dorotatesprite(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t #else tsetupspritevline(palookupoffs,xv,yv,ysiz); #endif - if (dastat & RS_TRANS2) settransreverse(); else settransnormal(); + setup_blend(0, dastat & RS_TRANS2); } for (x=x1; xcstat&512) settransreverse(); else settransnormal(); + setup_blend(spr->blend, spr->cstat&512); tsethlineshift(ox,oy); } diff --git a/polymer/eduke32/source/game.c b/polymer/eduke32/source/game.c index 81d7e6479..110e24bd7 100644 --- a/polymer/eduke32/source/game.c +++ b/polymer/eduke32/source/game.c @@ -3424,7 +3424,6 @@ static void palaccum_add(palaccum_t *pa, const palette_t *pal, int32_t f) pa->maxf = max(pa->maxf, f); pa->sumf += f; - // TODO: we need to do away with this 0-63 scale weirdness someday. pa->r += f*clamp(pal->r, 0, 63); pa->g += f*clamp(pal->g, 0, 63); pa->b += f*clamp(pal->b, 0, 63);