From edb2cb505e9616fb28653ece88b6f4f2c197fce5 Mon Sep 17 00:00:00 2001 From: Lactozilla <jp6781615@gmail.com> Date: Sun, 25 Jun 2023 02:02:01 -0300 Subject: [PATCH] Slight refactor --- src/r_draw.c | 129 +++++++++++++++++++++++++------------------------ src/r_draw8.c | 96 ++++++++++++++++++------------------ src/r_plane.c | 4 +- src/r_things.c | 2 +- 4 files changed, 117 insertions(+), 114 deletions(-) diff --git a/src/r_draw.c b/src/r_draw.c index 0c5a2c383c..4b2c782166 100644 --- a/src/r_draw.c +++ b/src/r_draw.c @@ -107,6 +107,12 @@ UINT8 *blendtables[NUMBLENDMAPS]; UINT8 *dc_transmap; // one of the translucency tables UINT8 dc_alpha; // column alpha +static INT32 multtable[0x10000]; +static INT32 multtableinv[0x10000]; + +static INT32 *dp_multtable = NULL; +static INT32 *dp_multtableinv = NULL; + UINT32 (*R_BlendModeMix)(UINT32, UINT32, UINT8) = NULL; // ---------------------- @@ -210,8 +216,7 @@ void R_InitTranslucencyTables(void) // Load here the transparency lookup tables 'TRANSx0' // NOTE: the TRANSx0 resources MUST BE aligned on 64k for the asm // optimised code (in other words, transtables pointer low word is 0) - transtables = Z_MallocAlign(NUMTRANSTABLES*0x10000, PU_STATIC, - NULL, 16); + transtables = Z_MallocAlign(NUMTRANSTABLES*0x10000, PU_STATIC, NULL, 16); W_ReadLump(W_GetNumForName("TRANS10"), transtables); W_ReadLump(W_GetNumForName("TRANS20"), transtables+0x10000); @@ -223,6 +228,15 @@ void R_InitTranslucencyTables(void) W_ReadLump(W_GetNumForName("TRANS80"), transtables+0x70000); W_ReadLump(W_GetNumForName("TRANS90"), transtables+0x80000); + for (unsigned alpha = 0; alpha < 0x100; alpha++) + { + for (unsigned color = 0; color < 0x100; color++) + { + multtable[alpha << 8 | color] = (alpha * color) >> 8; + multtableinv[alpha << 8 | color] = (((int)alpha ^ 0xFF) * color) >> 8; + } + } + R_GenerateBlendTables(); } @@ -1011,42 +1025,38 @@ static inline UINT32 Blend_Copy(UINT32 fg, UINT32 bg, UINT8 alpha) { (void)bg; (void)alpha; - return (0xFF000000 | fg); + return 0xFF000000 | fg; } static inline UINT32 Blend_Translucent(UINT32 fg, UINT32 bg, UINT8 alpha) { - fg = R_TranslucentMix(bg, fg, alpha); - return (0xFF000000 | fg); + (void)alpha; + + return 0xFF000000 | R_PutRgbaRGB( + (dp_multtable[R_GetRgbaR(fg)] + dp_multtableinv[R_GetRgbaR(bg)]), + (dp_multtable[R_GetRgbaG(fg)] + dp_multtableinv[R_GetRgbaG(bg)]), + (dp_multtable[R_GetRgbaB(fg)] + dp_multtableinv[R_GetRgbaB(bg)])); } static inline UINT32 Blend_Additive(UINT32 fg, UINT32 bg, UINT8 alpha) { - UINT8 r = clamp(R_GetRgbaR(bg) + R_GetRgbaR(fg)); - UINT8 g = clamp(R_GetRgbaG(bg) + R_GetRgbaG(fg)); - UINT8 b = clamp(R_GetRgbaB(bg) + R_GetRgbaB(fg)); + (void)alpha; - fg = R_PutRgbaRGB(r, g, b); - fg = R_TranslucentMix(bg, fg, alpha); + UINT8 r = clamp(dp_multtable[R_GetRgbaR(fg)] + R_GetRgbaR(bg)); + UINT8 g = clamp(dp_multtable[R_GetRgbaG(fg)] + R_GetRgbaG(bg)); + UINT8 b = clamp(dp_multtable[R_GetRgbaB(fg)] + R_GetRgbaB(bg)); - return (0xFF000000 | fg); + return 0xFF000000 | R_PutRgbaRGB( + (dp_multtable[r] + dp_multtableinv[R_GetRgbaR(bg)]), + (dp_multtable[g] + dp_multtableinv[R_GetRgbaG(bg)]), + (dp_multtable[b] + dp_multtableinv[R_GetRgbaB(bg)])); } static inline UINT32 Blend_Subtractive(UINT32 fg, UINT32 bg, UINT8 alpha) { - INT32 mixR, mixG, mixB; - UINT8 r, g, b; - - if (alpha == 0) - return 0xFF000000; - - mixR = R_GetRgbaR(fg); - mixG = R_GetRgbaG(fg); - mixB = R_GetRgbaB(fg); - - r = clamp((INT32)(-R_GetRgbaR(bg) + mixR)); - g = clamp((INT32)(-R_GetRgbaG(bg) + mixG)); - b = clamp((INT32)(-R_GetRgbaB(bg) + mixB)); + UINT8 r = clamp((INT32)(-R_GetRgbaR(bg) + R_GetRgbaR(fg))); + UINT8 g = clamp((INT32)(-R_GetRgbaG(bg) + R_GetRgbaG(fg))); + UINT8 b = clamp((INT32)(-R_GetRgbaB(bg) + R_GetRgbaB(fg))); alpha = (0xFF - alpha); @@ -1054,44 +1064,34 @@ static inline UINT32 Blend_Subtractive(UINT32 fg, UINT32 bg, UINT8 alpha) g = clamp((INT32)(g - alpha)); b = clamp((INT32)(b - alpha)); - return (0xFF000000 | R_PutRgbaRGB(r, g, b)); + return 0xFF000000 | R_PutRgbaRGB(r, g, b); } static inline UINT32 Blend_ReverseSubtractive(UINT32 fg, UINT32 bg, UINT8 alpha) { - INT32 mixR, mixG, mixB; - UINT8 r, g, b; - - if (alpha == 0) - return bg; - - mixR = R_GetRgbaR(fg); - mixG = R_GetRgbaG(fg); - mixB = R_GetRgbaB(fg); + (void)alpha; - r = clamp((INT32)(R_GetRgbaR(bg) - mixR)); - g = clamp((INT32)(R_GetRgbaG(bg) - mixG)); - b = clamp((INT32)(R_GetRgbaB(bg) - mixB)); + INT32 bgr = R_GetRgbaR(bg); + INT32 bgg = R_GetRgbaG(bg); + INT32 bgb = R_GetRgbaB(bg); - fg = R_PutRgbaRGB(r, g, b); - fg = R_TranslucentMix(bg, fg, alpha); + UINT8 r = clamp((INT32)(bgr - R_GetRgbaR(fg))); + UINT8 g = clamp((INT32)(bgg - R_GetRgbaG(fg))); + UINT8 b = clamp((INT32)(bgb - R_GetRgbaB(fg))); - return (0xFF000000 | fg); + return 0xFF000000 | R_PutRgbaRGB( + (dp_multtable[r] + dp_multtableinv[bgr]), + (dp_multtable[g] + dp_multtableinv[bgg]), + (dp_multtable[b] + dp_multtableinv[bgb])); } static inline UINT32 Blend_Multiplicative(UINT32 fg, UINT32 bg, UINT8 alpha) { - float mixR = ((float)R_GetRgbaR(fg) / 256.0f); - float mixG = ((float)R_GetRgbaG(fg) / 256.0f); - float mixB = ((float)R_GetRgbaB(fg) / 256.0f); - - UINT8 r = clamp((int)(R_GetRgbaR(bg) * mixR)); - UINT8 g = clamp((int)(R_GetRgbaG(bg) * mixG)); - UINT8 b = clamp((int)(R_GetRgbaB(bg) * mixB)); - (void)alpha; - - return (0xFF000000 | R_PutRgbaRGB(r, g, b)); + UINT8 r = ((INT32)R_GetRgbaR(bg) * (INT32)R_GetRgbaR(fg)) >> 8; + UINT8 g = ((INT32)R_GetRgbaG(bg) * (INT32)R_GetRgbaG(fg)) >> 8; + UINT8 b = ((INT32)R_GetRgbaB(bg) * (INT32)R_GetRgbaB(fg)) >> 8; + return 0xFF000000 | R_PutRgbaRGB(r, g, b); } static inline void R_SetBlendingFunction(INT32 blendmode) @@ -1120,11 +1120,11 @@ static inline void R_SetBlendingFunction(INT32 blendmode) } } -static void R_AlphaBlend_8(UINT8 src, UINT8 alpha, UINT8 *dest) +static UINT8 R_AlphaBlend_8(UINT8 src, UINT8 alpha, UINT8 *dest) { RGBA_t result; result.rgba = R_BlendModeMix(GetTrueColor(src), GetTrueColor(*dest), alpha); - *dest = GetColorLUT(&r_draw_lut, result.s.red, result.s.green, result.s.blue); + return GetColorLUT(&r_draw_lut, result.s.red, result.s.green, result.s.blue); } static UINT8 R_AlphaBlend_s8d8(UINT8 src, UINT8 alpha, UINT8 dest) @@ -1146,6 +1146,9 @@ void R_SetColumnBlendingFunction(INT32 blendmode) else #endif R_SetBlendingFunction(blendmode); + + dp_multtable = &multtable[dc_alpha << 8]; + dp_multtableinv = &multtableinv[dc_alpha << 8]; } void R_SetSpanBlendingFunction(INT32 blendmode) @@ -1156,6 +1159,9 @@ void R_SetSpanBlendingFunction(INT32 blendmode) else #endif R_SetBlendingFunction(blendmode); + + dp_multtable = &multtable[ds_alpha << 8]; + dp_multtableinv = &multtableinv[ds_alpha << 8]; } void R_InitAlphaLUT(void) @@ -1216,7 +1222,7 @@ static UINT32 TC_ColorMix(UINT32 fg, UINT32 bg) // Apply the color cube fg = ColorCube_ApplyRGBA(fg); - cache->result = (0xFF000000 | fg); + cache->result = 0xFF000000 | fg; return cache->result; } @@ -1250,7 +1256,7 @@ static UINT32 TC_ColorMix2(UINT32 fg, UINT32 bg) // Apply the color cube fg = ColorCube_ApplyRGBA(fg); - cache->result = (0xFF000000 | fg); + cache->result = 0xFF000000 | fg; return cache->result; } @@ -1306,15 +1312,12 @@ static inline UINT32 TC_Colormap32Mix(UINT32 color) static inline UINT32 Blend_ColorMix_Copy(UINT32 fg, UINT32 bg, UINT8 alpha) { (void)alpha; - fg = TC_ColorMix(fg, bg); - return (0xFF000000 | fg); + return TC_ColorMix(fg, bg); } static inline UINT32 Blend_ColorMix_Translucent(UINT32 fg, UINT32 bg, UINT8 alpha) { - fg = TC_ColorMix(fg, bg); - fg = R_TranslucentMix(bg, fg, alpha); - return (0xFF000000 | fg); + return Blend_Translucent(fg, TC_ColorMix(fg, bg), alpha); } static inline UINT32 Blend_ColorMix_Additive(UINT32 fg, UINT32 bg, UINT8 alpha) @@ -1419,15 +1422,15 @@ static inline void R_SetBlendingFunction_ColorMix(INT32 blendmode) #undef clamp -#define WriteTranslucentColumn(idx) *dest = R_BlendModeMix(GetTrueColor(idx), *(UINT32 *)dest, dc_alpha) -#define WriteTranslucentColumn32(idx) *dest = R_BlendModeMix(idx, *(UINT32 *)dest, dc_alpha) +#define WriteTranslucentColumn(idx) *dest = R_AlphaBlend_8(idx, dc_alpha, dest) +#define WriteTranslucentColumn32(idx) *dest = R_BlendModeMix(idx, dc_alpha, (UINT32 *)dest) -#define WriteTranslucentSpan(idx) *dest = R_BlendModeMix(GetTrueColor(idx), *(UINT32 *)dest, ds_alpha) +#define WriteTranslucentSpan(idx) *dest = R_AlphaBlend_8(idx, ds_alpha, dest) #define WriteTranslucentSpan32(idx) *dest = R_BlendModeMix(idx, *(UINT32 *)dest, ds_alpha) #define WriteTranslucentSpanIdx(idx, destidx) dest[destidx] = R_BlendModeMix(GetTrueColor(idx), dest[destidx], ds_alpha) #define WriteTranslucentSpanIdx32(idx, destidx) dest[destidx] = R_BlendModeMix(idx, dest[destidx], ds_alpha) -#define WriteTranslucentWaterSpan(idx) *dest = R_BlendModeMix(GetTrueColor(idx), *(UINT32 *)dsrc, ds_alpha); dsrc++ +#define WriteTranslucentWaterSpan(idx) *dest = R_AlphaBlend_8(idx, ds_alpha, dsrc); dsrc++ #define WriteTranslucentWaterSpan32(idx) *dest = R_BlendModeMix(idx, *(UINT32 *)dsrc, ds_alpha); dsrc++ #define WriteTranslucentWaterSpanIdx(idx, destidx) dest[destidx] = R_BlendModeMix(GetTrueColor(idx), *(UINT32 *)dsrc, ds_alpha); dsrc++ #define WriteTranslucentWaterSpanIdx32(idx, destidx) dest[destidx] = R_BlendModeMix(idx, *(UINT32 *)dsrc, ds_alpha); dsrc++ diff --git a/src/r_draw8.c b/src/r_draw8.c index 7ab2f3e9cb..3f43f4309f 100644 --- a/src/r_draw8.c +++ b/src/r_draw8.c @@ -355,7 +355,7 @@ void R_Draw2sMultiPatchAlphaColumn_8(void) val = source[frac>>FRACBITS]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], dc_alpha, dest); + *dest = R_AlphaBlend_8(colormap[val], dc_alpha, dest); dest += vid.width; @@ -375,12 +375,12 @@ void R_Draw2sMultiPatchAlphaColumn_8(void) { val = source[(frac>>FRACBITS) & heightmask]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], dc_alpha, dest); + *dest = R_AlphaBlend_8(colormap[val], dc_alpha, dest); dest += vid.width; frac += fracstep; val = source[(frac>>FRACBITS) & heightmask]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], dc_alpha, dest); + *dest = R_AlphaBlend_8(colormap[val], dc_alpha, dest); dest += vid.width; frac += fracstep; } @@ -388,7 +388,7 @@ void R_Draw2sMultiPatchAlphaColumn_8(void) { val = source[(frac>>FRACBITS) & heightmask]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], dc_alpha, dest); + *dest = R_AlphaBlend_8(colormap[val], dc_alpha, dest); } } } @@ -535,13 +535,13 @@ void R_DrawDropShadowColumn_8(void) { while ((count -= 2) >= 0) { - R_AlphaBlend_8(DSCOLOR, dc_alpha, dest); + *dest = R_AlphaBlend_8(DSCOLOR, dc_alpha, dest); dest += vid.width; - R_AlphaBlend_8(DSCOLOR, dc_alpha, dest); + *dest = R_AlphaBlend_8(DSCOLOR, dc_alpha, dest); dest += vid.width; } if (count & 1) - R_AlphaBlend_8(DSCOLOR, dc_alpha, dest); + *dest = R_AlphaBlend_8(DSCOLOR, dc_alpha, dest); } else { @@ -608,7 +608,7 @@ void R_DrawAlphaColumn_8(void) // Re-map color indices from wall texture column // using a lighting/special effects LUT. // heightmask is the Tutti-Frutti fix - R_AlphaBlend_8(colormap[source[frac>>FRACBITS]], dc_alpha, dest); + *dest = R_AlphaBlend_8(colormap[source[frac>>FRACBITS]], dc_alpha, dest); dest += vid.width; if ((frac += fracstep) >= heightmask) frac -= heightmask; @@ -619,15 +619,15 @@ void R_DrawAlphaColumn_8(void) { while ((count -= 2) >= 0) // texture height is a power of 2 { - R_AlphaBlend_8(colormap[source[(frac>>FRACBITS)&heightmask]], dc_alpha, dest); + *dest = R_AlphaBlend_8(colormap[source[(frac>>FRACBITS)&heightmask]], dc_alpha, dest); dest += vid.width; frac += fracstep; - R_AlphaBlend_8(colormap[source[(frac>>FRACBITS)&heightmask]], dc_alpha, dest); + *dest = R_AlphaBlend_8(colormap[source[(frac>>FRACBITS)&heightmask]], dc_alpha, dest); dest += vid.width; frac += fracstep; } if (count & 1) - R_AlphaBlend_8(colormap[source[(frac>>FRACBITS)&heightmask]], dc_alpha, dest); + *dest = R_AlphaBlend_8(colormap[source[(frac>>FRACBITS)&heightmask]], dc_alpha, dest); } } } @@ -744,7 +744,7 @@ void R_DrawTranslatedAlphaColumn_8(void) // Re-map color indices from wall texture column // using a lighting/special effects LUT. // heightmask is the Tutti-Frutti fix - R_AlphaBlend_8(dc_colormap[dc_translation[dc_source[frac>>FRACBITS]]], dc_alpha, dest); + *dest = R_AlphaBlend_8(dc_colormap[dc_translation[dc_source[frac>>FRACBITS]]], dc_alpha, dest); dest += vid.width; if ((frac += fracstep) >= heightmask) frac -= heightmask; @@ -755,15 +755,15 @@ void R_DrawTranslatedAlphaColumn_8(void) { while ((count -= 2) >= 0) // texture height is a power of 2 { - R_AlphaBlend_8(dc_colormap[dc_translation[dc_source[(frac>>FRACBITS)&heightmask]]], dc_alpha, dest); + *dest = R_AlphaBlend_8(dc_colormap[dc_translation[dc_source[(frac>>FRACBITS)&heightmask]]], dc_alpha, dest); dest += vid.width; frac += fracstep; - R_AlphaBlend_8(dc_colormap[dc_translation[dc_source[(frac>>FRACBITS)&heightmask]]], dc_alpha, dest); + *dest = R_AlphaBlend_8(dc_colormap[dc_translation[dc_source[(frac>>FRACBITS)&heightmask]]], dc_alpha, dest); dest += vid.width; frac += fracstep; } if (count & 1) - R_AlphaBlend_8(dc_colormap[dc_translation[dc_source[(frac>>FRACBITS)&heightmask]]], dc_alpha, dest); + *dest = R_AlphaBlend_8(dc_colormap[dc_translation[dc_source[(frac>>FRACBITS)&heightmask]]], dc_alpha, dest); } } } @@ -1174,7 +1174,7 @@ void R_DrawTiltedAlphaSpan_8(void) for (i = SPANSIZE-1; i >= 0; i--) { colormap = planezlight[tiltlighting[ds_x1++]] + (ds_colormap - colormaps); - R_AlphaBlend_8(colormap[source[((v >> nflatyshift) & nflatmask) | (u >> nflatxshift)]], ds_alpha, dest); + *dest = R_AlphaBlend_8(colormap[source[((v >> nflatyshift) & nflatmask) | (u >> nflatxshift)]], ds_alpha, dest); dest++; u += stepu; v += stepv; @@ -1190,7 +1190,7 @@ void R_DrawTiltedAlphaSpan_8(void) u = (INT64)(startu); v = (INT64)(startv); colormap = planezlight[tiltlighting[ds_x1++]] + (ds_colormap - colormaps); - R_AlphaBlend_8(colormap[source[((v >> nflatyshift) & nflatmask) | (u >> nflatxshift)]], ds_alpha, dest); + *dest = R_AlphaBlend_8(colormap[source[((v >> nflatyshift) & nflatmask) | (u >> nflatxshift)]], ds_alpha, dest); } else { @@ -1211,7 +1211,7 @@ void R_DrawTiltedAlphaSpan_8(void) for (; width != 0; width--) { colormap = planezlight[tiltlighting[ds_x1++]] + (ds_colormap - colormaps); - R_AlphaBlend_8(colormap[source[((v >> nflatyshift) & nflatmask) | (u >> nflatxshift)]], ds_alpha, dest); + *dest = R_AlphaBlend_8(colormap[source[((v >> nflatyshift) & nflatmask) | (u >> nflatxshift)]], ds_alpha, dest); dest++; u += stepu; v += stepv; @@ -1788,49 +1788,49 @@ void R_DrawAlphaSplat_8(void) // need! val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], ds_alpha, dest + 0); + *dest = R_AlphaBlend_8(colormap[val], ds_alpha, dest + 0); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], ds_alpha, dest + 1); + *dest = R_AlphaBlend_8(colormap[val], ds_alpha, dest + 1); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], ds_alpha, dest + 2); + *dest = R_AlphaBlend_8(colormap[val], ds_alpha, dest + 2); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], ds_alpha, dest + 3); + *dest = R_AlphaBlend_8(colormap[val], ds_alpha, dest + 3); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], ds_alpha, dest + 4); + *dest = R_AlphaBlend_8(colormap[val], ds_alpha, dest + 4); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], ds_alpha, dest + 5); + *dest = R_AlphaBlend_8(colormap[val], ds_alpha, dest + 5); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], ds_alpha, dest + 6); + *dest = R_AlphaBlend_8(colormap[val], ds_alpha, dest + 6); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], ds_alpha, dest + 7); + *dest = R_AlphaBlend_8(colormap[val], ds_alpha, dest + 7); xposition += xstep; yposition += ystep; @@ -1841,7 +1841,7 @@ void R_DrawAlphaSplat_8(void) { val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val != TRANSPARENTPIXEL) - R_AlphaBlend_8(colormap[val], ds_alpha, dest); + *dest = R_AlphaBlend_8(colormap[val], ds_alpha, dest); dest++; xposition += xstep; yposition += ystep; @@ -2102,49 +2102,49 @@ void R_DrawAlphaFloorSprite_8(void) // need! val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 0); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 0); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 1); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 1); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 2); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 2); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 3); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 3); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 4); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 4); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 5); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 5); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 6); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 6); xposition += xstep; yposition += ystep; val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 7); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest + 7); xposition += xstep; yposition += ystep; @@ -2155,7 +2155,7 @@ void R_DrawAlphaFloorSprite_8(void) { val = source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest); dest++; xposition += xstep; yposition += ystep; @@ -2433,7 +2433,7 @@ void R_DrawTiltedAlphaFloorSprite_8(void) { val = source[((v >> nflatyshift) & nflatmask) | (u >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest); dest++; u += stepu; @@ -2451,7 +2451,7 @@ void R_DrawTiltedAlphaFloorSprite_8(void) v = (INT64)(startv); val = source[((v >> nflatyshift) & nflatmask) | (u >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest); } else { @@ -2473,7 +2473,7 @@ void R_DrawTiltedAlphaFloorSprite_8(void) { val = source[((v >> nflatyshift) & nflatmask) | (u >> nflatxshift)]; if (val & 0xFF00) - R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest); + *dest = R_AlphaBlend_8(colormap[translation[val & 0xFF]], ds_alpha, dest); dest++; u += stepu; @@ -2603,35 +2603,35 @@ void R_DrawAlphaSpan_8(void) // SoM: Why didn't I see this earlier? the spot variable is a waste now because we don't // have the uber complicated math to calculate it now, so that was a memory write we didn't // need! - R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 0); + *dest = R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 0); xposition += xstep; yposition += ystep; - R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 1); + *dest = R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 1); xposition += xstep; yposition += ystep; - R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 2); + *dest = R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 2); xposition += xstep; yposition += ystep; - R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 3); + *dest = R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 3); xposition += xstep; yposition += ystep; - R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 4); + *dest = R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 4); xposition += xstep; yposition += ystep; - R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 5); + *dest = R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 5); xposition += xstep; yposition += ystep; - R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 6); + *dest = R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 6); xposition += xstep; yposition += ystep; - R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 7); + *dest = R_AlphaBlend_8(colormap[source[(((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift)]], ds_alpha, dest + 7); xposition += xstep; yposition += ystep; @@ -2641,7 +2641,7 @@ void R_DrawAlphaSpan_8(void) while (count-- && dest <= deststop) { val = (((UINT32)yposition >> nflatyshift) & nflatmask) | ((UINT32)xposition >> nflatxshift); - R_AlphaBlend_8(colormap[source[val]], ds_alpha, dest); + *dest = R_AlphaBlend_8(colormap[source[val]], ds_alpha, dest); dest++; xposition += xstep; yposition += ystep; diff --git a/src/r_plane.c b/src/r_plane.c index 788b820efa..751fd95dc0 100644 --- a/src/r_plane.c +++ b/src/r_plane.c @@ -945,8 +945,8 @@ void R_DrawSinglePlane(visplane_t *pl) if (!usetranstables) { - R_SetSpanBlendingFunction(AST_TRANSLUCENT); ds_alpha = R_TransnumToAlpha(transval); + R_SetSpanBlendingFunction(AST_TRANSLUCENT); } else ds_transmap = R_GetTranslucencyTable(transval); @@ -958,8 +958,8 @@ void R_DrawSinglePlane(visplane_t *pl) spanfunctype = SPAN_SPLAT; #ifdef TRUECOLOR - R_SetSpanBlendingFunction(AST_COPY); ds_alpha = 0xFF; + R_SetSpanBlendingFunction(AST_COPY); #endif } diff --git a/src/r_things.c b/src/r_things.c index 6ad93c5591..30da91e94a 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1075,8 +1075,8 @@ static void R_DrawPrecipitationVisSprite(vissprite_t *vis) if (!usetranstables) { - R_SetColumnBlendingFunction(vis->blendmode); dc_alpha = vis->alpha; + R_SetColumnBlendingFunction(vis->blendmode); } else dc_transmap = vis->transmap; //Fab : 29-04-98: translucency table -- GitLab