- Reimplemented rgb555 into burn/crossfade in f_wipe.cpp.

This commit is contained in:
Rachael Alexanderson 2016-12-24 12:42:27 -05:00
parent 785b58f57a
commit 9ece249dbb

View file

@ -30,6 +30,8 @@
#include "templates.h" #include "templates.h"
#include "v_palette.h" #include "v_palette.h"
EXTERN_CVAR(Bool, r_blendmethod)
// //
// SCREEN WIPE PACKAGE // SCREEN WIPE PACKAGE
// //
@ -281,42 +283,80 @@ bool wipe_doBurn (int ticks)
fromold = (BYTE *)wipe_scr_start; fromold = (BYTE *)wipe_scr_start;
fromnew = (BYTE *)wipe_scr_end; fromnew = (BYTE *)wipe_scr_end;
for (y = 0, firey = 0; y < SCREENHEIGHT; y++, firey += ystep) if (!r_blendmethod)
{ {
for (x = 0, firex = 0; x < SCREENWIDTH; x++, firex += xstep) for (y = 0, firey = 0; y < SCREENHEIGHT; y++, firey += ystep)
{ {
int fglevel; for (x = 0, firex = 0; x < SCREENWIDTH; x++, firex += xstep)
fglevel = burnarray[(firex>>SHIFT)+(firey>>SHIFT)*FIREWIDTH] / 2;
if (fglevel >= 63)
{ {
to[x] = fromnew[x]; int fglevel;
}
else if (fglevel == 0)
{
to[x] = fromold[x];
done = false;
}
else
{
int bglevel = 64-fglevel;
const PalEntry* pal = GPalette.BaseColors; fglevel = burnarray[(firex>>SHIFT)+(firey>>SHIFT)*FIREWIDTH] / 2;
if (fglevel >= 63)
DWORD fg = fromnew[x]; {
DWORD bg = fromold[x]; to[x] = fromnew[x];
int r = MIN((pal[fg].r * fglevel + pal[bg].r * bglevel) >> 8, 63); }
int g = MIN((pal[fg].g * fglevel + pal[bg].g * bglevel) >> 8, 63); else if (fglevel == 0)
int b = MIN((pal[fg].b * fglevel + pal[bg].b * bglevel) >> 8, 63); {
to[x] = RGB256k.RGB[r][g][b]; to[x] = fromold[x];
done = false; done = false;
}
else
{
int bglevel = 64-fglevel;
DWORD *fg2rgb = Col2RGB8[fglevel];
DWORD *bg2rgb = Col2RGB8[bglevel];
DWORD fg = fg2rgb[fromnew[x]];
DWORD bg = bg2rgb[fromold[x]];
fg = (fg+bg) | 0x1f07c1f;
to[x] = RGB32k.All[fg & (fg>>15)];
done = false;
}
} }
fromold += SCREENWIDTH;
fromnew += SCREENWIDTH;
to += SCREENPITCH;
} }
fromold += SCREENWIDTH;
fromnew += SCREENWIDTH;
to += SCREENPITCH;
}
}
else
{
for (y = 0, firey = 0; y < SCREENHEIGHT; y++, firey += ystep)
{
for (x = 0, firex = 0; x < SCREENWIDTH; x++, firex += xstep)
{
int fglevel;
fglevel = burnarray[(firex>>SHIFT)+(firey>>SHIFT)*FIREWIDTH] / 2;
if (fglevel >= 63)
{
to[x] = fromnew[x];
}
else if (fglevel == 0)
{
to[x] = fromold[x];
done = false;
}
else
{
int bglevel = 64-fglevel;
const PalEntry* pal = GPalette.BaseColors;
DWORD fg = fromnew[x];
DWORD bg = fromold[x];
int r = MIN((pal[fg].r * fglevel + pal[bg].r * bglevel) >> 8, 63);
int g = MIN((pal[fg].g * fglevel + pal[bg].g * bglevel) >> 8, 63);
int b = MIN((pal[fg].b * fglevel + pal[bg].b * bglevel) >> 8, 63);
to[x] = RGB256k.RGB[r][g][b];
done = false;
}
}
fromold += SCREENWIDTH;
fromnew += SCREENWIDTH;
to += SCREENPITCH;
}
}
return done || (burntime > 40); return done || (burntime > 40);
} }
@ -346,25 +386,46 @@ bool wipe_doFade (int ticks)
{ {
int x, y; int x, y;
int bglevel = 64 - fade; int bglevel = 64 - fade;
DWORD *fg2rgb = Col2RGB8[fade];
DWORD *bg2rgb = Col2RGB8[bglevel];
BYTE *fromnew = (BYTE *)wipe_scr_end; BYTE *fromnew = (BYTE *)wipe_scr_end;
BYTE *fromold = (BYTE *)wipe_scr_start; BYTE *fromold = (BYTE *)wipe_scr_start;
BYTE *to = screen->GetBuffer(); BYTE *to = screen->GetBuffer();
const PalEntry *pal = GPalette.BaseColors; const PalEntry *pal = GPalette.BaseColors;
for (y = 0; y < SCREENHEIGHT; y++) if (!r_blendmethod)
{ {
for (x = 0; x < SCREENWIDTH; x++) for (y = 0; y < SCREENHEIGHT; y++)
{ {
DWORD fg = fromnew[x]; for (x = 0; x < SCREENWIDTH; x++)
DWORD bg = fromold[x]; {
int r = MIN((pal[fg].r * (64-bglevel) + pal[bg].r * bglevel) >> 8, 63); DWORD fg = fg2rgb[fromnew[x]];
int g = MIN((pal[fg].g * (64-bglevel) + pal[bg].g * bglevel) >> 8, 63); DWORD bg = bg2rgb[fromold[x]];
int b = MIN((pal[fg].b * (64-bglevel) + pal[bg].b * bglevel) >> 8, 63); fg = (fg+bg) | 0x1f07c1f;
to[x] = RGB256k.RGB[r][g][b]; to[x] = RGB32k.All[fg & (fg>>15)];
}
fromnew += SCREENWIDTH;
fromold += SCREENWIDTH;
to += SCREENPITCH;
}
}
else
{
for (y = 0; y < SCREENHEIGHT; y++)
{
for (x = 0; x < SCREENWIDTH; x++)
{
DWORD fg = fromnew[x];
DWORD bg = fromold[x];
int r = MIN((pal[fg].r * (64-bglevel) + pal[bg].r * bglevel) >> 8, 63);
int g = MIN((pal[fg].g * (64-bglevel) + pal[bg].g * bglevel) >> 8, 63);
int b = MIN((pal[fg].b * (64-bglevel) + pal[bg].b * bglevel) >> 8, 63);
to[x] = RGB256k.RGB[r][g][b];
}
fromnew += SCREENWIDTH;
fromold += SCREENWIDTH;
to += SCREENPITCH;
} }
fromnew += SCREENWIDTH;
fromold += SCREENWIDTH;
to += SCREENPITCH;
} }
} }
return false; return false;