Fix HUD colors when hw2d is off

This commit is contained in:
Magnus Norddahl 2016-06-13 20:01:31 +02:00
parent e31331bed2
commit 3ce2d8365d
3 changed files with 28 additions and 13 deletions

View file

@ -325,11 +325,11 @@ public:
{ {
int pitch = dc_pitch * thread->num_cores; int pitch = dc_pitch * thread->num_cores;
BYTE color = dc_color; uint32_t color = shade_pal_index_simple(dc_color, light);
do do
{ {
*dest = shade_pal_index_simple(color, light); *dest = color;
dest += pitch; dest += pitch;
} while (--count); } while (--count);
} }
@ -629,6 +629,7 @@ class DrawAddColumnRGBACommand : public DrawerCommand
ShadeConstants dc_shade_constants; ShadeConstants dc_shade_constants;
fixed_t dc_srcalpha; fixed_t dc_srcalpha;
fixed_t dc_destalpha; fixed_t dc_destalpha;
BYTE *dc_colormap;
public: public:
DrawAddColumnRGBACommand() DrawAddColumnRGBACommand()
@ -643,6 +644,7 @@ public:
dc_shade_constants = ::dc_shade_constants; dc_shade_constants = ::dc_shade_constants;
dc_srcalpha = ::dc_srcalpha; dc_srcalpha = ::dc_srcalpha;
dc_destalpha = ::dc_destalpha; dc_destalpha = ::dc_destalpha;
dc_colormap = ::dc_colormap;
} }
void Execute(DrawerThread *thread) override void Execute(DrawerThread *thread) override
@ -667,13 +669,14 @@ public:
uint32_t light = calc_light_multiplier(dc_light); uint32_t light = calc_light_multiplier(dc_light);
ShadeConstants shade_constants = dc_shade_constants; ShadeConstants shade_constants = dc_shade_constants;
BYTE *colormap = dc_colormap;
uint32_t fg_alpha = dc_srcalpha >> (FRACBITS - 8); uint32_t fg_alpha = dc_srcalpha >> (FRACBITS - 8);
uint32_t bg_alpha = dc_destalpha >> (FRACBITS - 8); uint32_t bg_alpha = dc_destalpha >> (FRACBITS - 8);
do do
{ {
uint32_t fg = shade_pal_index(source[frac >> FRACBITS], light, shade_constants); uint32_t fg = shade_pal_index(colormap[source[frac >> FRACBITS]], light, shade_constants);
uint32_t fg_red = (fg >> 16) & 0xff; uint32_t fg_red = (fg >> 16) & 0xff;
uint32_t fg_green = (fg >> 8) & 0xff; uint32_t fg_green = (fg >> 8) & 0xff;

View file

@ -512,6 +512,7 @@ class RtAdd1colRGBACommand : public DrawerCommand
ShadeConstants dc_shade_constants; ShadeConstants dc_shade_constants;
fixed_t dc_srcalpha; fixed_t dc_srcalpha;
fixed_t dc_destalpha; fixed_t dc_destalpha;
BYTE *dc_colormap;
public: public:
RtAdd1colRGBACommand(int hx, int sx, int yl, int yh) RtAdd1colRGBACommand(int hx, int sx, int yl, int yh)
@ -527,6 +528,7 @@ public:
dc_shade_constants = ::dc_shade_constants; dc_shade_constants = ::dc_shade_constants;
dc_srcalpha = ::dc_srcalpha; dc_srcalpha = ::dc_srcalpha;
dc_destalpha = ::dc_destalpha; dc_destalpha = ::dc_destalpha;
dc_colormap = ::dc_colormap;
} }
void Execute(DrawerThread *thread) override void Execute(DrawerThread *thread) override
@ -548,12 +550,13 @@ public:
uint32_t light = calc_light_multiplier(dc_light); uint32_t light = calc_light_multiplier(dc_light);
ShadeConstants shade_constants = dc_shade_constants; ShadeConstants shade_constants = dc_shade_constants;
BYTE *colormap = dc_colormap;
uint32_t fg_alpha = dc_srcalpha >> (FRACBITS - 8); uint32_t fg_alpha = dc_srcalpha >> (FRACBITS - 8);
uint32_t bg_alpha = dc_destalpha >> (FRACBITS - 8); uint32_t bg_alpha = dc_destalpha >> (FRACBITS - 8);
do { do {
uint32_t fg = shade_pal_index(*source, light, shade_constants); uint32_t fg = shade_pal_index(colormap[*source], light, shade_constants);
uint32_t fg_red = (fg >> 16) & 0xff; uint32_t fg_red = (fg >> 16) & 0xff;
uint32_t fg_green = (fg >> 8) & 0xff; uint32_t fg_green = (fg >> 8) & 0xff;
uint32_t fg_blue = fg & 0xff; uint32_t fg_blue = fg & 0xff;
@ -583,6 +586,7 @@ class RtAdd4colsRGBACommand : public DrawerCommand
int dc_pitch; int dc_pitch;
fixed_t dc_light; fixed_t dc_light;
ShadeConstants dc_shade_constants; ShadeConstants dc_shade_constants;
BYTE *dc_colormap;
public: public:
RtAdd4colsRGBACommand(int sx, int yl, int yh) RtAdd4colsRGBACommand(int sx, int yl, int yh)
@ -595,6 +599,7 @@ public:
dc_pitch = ::dc_pitch; dc_pitch = ::dc_pitch;
dc_light = ::dc_light; dc_light = ::dc_light;
dc_shade_constants = ::dc_shade_constants; dc_shade_constants = ::dc_shade_constants;
dc_colormap = ::dc_colormap;
} }
#ifdef NO_SSE #ifdef NO_SSE
@ -617,6 +622,7 @@ public:
uint32_t light = calc_light_multiplier(dc_light); uint32_t light = calc_light_multiplier(dc_light);
ShadeConstants shade_constants = dc_shade_constants; ShadeConstants shade_constants = dc_shade_constants;
BYTE *colormap = dc_colormap;
uint32_t fg_alpha = dc_srcalpha >> (FRACBITS - 8); uint32_t fg_alpha = dc_srcalpha >> (FRACBITS - 8);
uint32_t bg_alpha = dc_destalpha >> (FRACBITS - 8); uint32_t bg_alpha = dc_destalpha >> (FRACBITS - 8);
@ -624,7 +630,7 @@ public:
do { do {
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
uint32_t fg = shade_pal_index(source[i], light, shade_constants); uint32_t fg = shade_pal_index(colormap[source[i]], light, shade_constants);
uint32_t fg_red = (fg >> 16) & 0xff; uint32_t fg_red = (fg >> 16) & 0xff;
uint32_t fg_green = (fg >> 8) & 0xff; uint32_t fg_green = (fg >> 8) & 0xff;
uint32_t fg_blue = fg & 0xff; uint32_t fg_blue = fg & 0xff;
@ -664,6 +670,7 @@ public:
uint32_t light = calc_light_multiplier(dc_light); uint32_t light = calc_light_multiplier(dc_light);
uint32_t *palette = (uint32_t*)GPalette.BaseColors; uint32_t *palette = (uint32_t*)GPalette.BaseColors;
BYTE *colormap = dc_colormap;
uint32_t fg_alpha = dc_srcalpha >> (FRACBITS - 8); uint32_t fg_alpha = dc_srcalpha >> (FRACBITS - 8);
uint32_t bg_alpha = dc_destalpha >> (FRACBITS - 8); uint32_t bg_alpha = dc_destalpha >> (FRACBITS - 8);
@ -678,10 +685,10 @@ public:
__m128i mbg_alpha = _mm_set_epi16(256, bg_alpha, bg_alpha, bg_alpha, 256, bg_alpha, bg_alpha, bg_alpha); __m128i mbg_alpha = _mm_set_epi16(256, bg_alpha, bg_alpha, bg_alpha, 256, bg_alpha, bg_alpha, bg_alpha);
do { do {
uint32_t p0 = source[0]; uint32_t p0 = colormap[source[0]];
uint32_t p1 = source[1]; uint32_t p1 = colormap[source[1]];
uint32_t p2 = source[2]; uint32_t p2 = colormap[source[2]];
uint32_t p3 = source[3]; uint32_t p3 = colormap[source[3]];
// shade_pal_index: // shade_pal_index:
__m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]); __m128i fg = _mm_set_epi32(palette[p3], palette[p2], palette[p1], palette[p0]);

View file

@ -1095,9 +1095,10 @@ void DCanvas::DrawLine(int x0, int y0, int x1, int y1, int palColor, uint32 real
} }
if (IsBgra()) if (IsBgra())
{ {
uint32_t fillColor = GPalette.BaseColors[palColor].d;
uint32_t *spot = (uint32_t*)GetBuffer() + y0*GetPitch() + x0; uint32_t *spot = (uint32_t*)GetBuffer() + y0*GetPitch() + x0;
for (int i = 0; i <= deltaX; i++) for (int i = 0; i <= deltaX; i++)
spot[i] = palColor; spot[i] = fillColor;
} }
else else
{ {
@ -1108,11 +1109,12 @@ void DCanvas::DrawLine(int x0, int y0, int x1, int y1, int palColor, uint32 real
{ // vertical line { // vertical line
if (IsBgra()) if (IsBgra())
{ {
uint32_t fillColor = GPalette.BaseColors[palColor].d;
uint32_t *spot = (uint32_t*)GetBuffer() + y0*GetPitch() + x0; uint32_t *spot = (uint32_t*)GetBuffer() + y0*GetPitch() + x0;
int pitch = GetPitch(); int pitch = GetPitch();
do do
{ {
*spot = palColor; *spot = fillColor;
spot += pitch; spot += pitch;
} while (--deltaY != 0); } while (--deltaY != 0);
} }
@ -1131,11 +1133,12 @@ void DCanvas::DrawLine(int x0, int y0, int x1, int y1, int palColor, uint32 real
{ // diagonal line. { // diagonal line.
if (IsBgra()) if (IsBgra())
{ {
uint32_t fillColor = GPalette.BaseColors[palColor].d;
uint32_t *spot = (uint32_t*)GetBuffer() + y0*GetPitch() + x0; uint32_t *spot = (uint32_t*)GetBuffer() + y0*GetPitch() + x0;
int advance = GetPitch() + xDir; int advance = GetPitch() + xDir;
do do
{ {
*spot = palColor; *spot = fillColor;
spot += advance; spot += advance;
} while (--deltaY != 0); } while (--deltaY != 0);
} }
@ -1299,12 +1302,14 @@ void DCanvas::Clear (int left, int top, int right, int bottom, int palcolor, uin
if (IsBgra()) if (IsBgra())
{ {
uint32_t fill_color = GPalette.BaseColors[palcolor];
uint32_t *dest = (uint32_t*)Buffer + top * Pitch + left; uint32_t *dest = (uint32_t*)Buffer + top * Pitch + left;
x = right - left; x = right - left;
for (y = top; y < bottom; y++) for (y = top; y < bottom; y++)
{ {
for (int i = 0; i < x; i++) for (int i = 0; i < x; i++)
dest[i] = palcolor; dest[i] = fill_color;
dest += Pitch; dest += Pitch;
} }
} }