- fixed: True color texture generation for DDS was broken.

SVN r2226 (trunk)
This commit is contained in:
Christoph Oelckers 2010-03-18 07:54:16 +00:00
parent 44e877a243
commit d69eb3acd1

View file

@ -634,7 +634,7 @@ void FDDSTexture::DecompressDXT1 (FWadLump &lump, BYTE *tcbuf)
bMasked = true; bMasked = true;
} }
// Pick colors from the palette for each of the four colors. // Pick colors from the palette for each of the four colors.
if (!tcbuf) for (i = 3; i >= 0; --i) /*if (!tcbuf)*/ for (i = 3; i >= 0; --i)
{ {
palcol[i] = color[i].a ? RGB32k[color[i].r >> 3][color[i].g >> 3][color[i].b >> 3] : 0; palcol[i] = color[i].a ? RGB32k[color[i].r >> 3][color[i].g >> 3][color[i].b >> 3] : 0;
} }
@ -652,18 +652,18 @@ void FDDSTexture::DecompressDXT1 (FWadLump &lump, BYTE *tcbuf)
{ {
break; break;
} }
int ci = (yslice >> (x + x)) & 3;
if (!tcbuf) if (!tcbuf)
{ {
Pixels[oy + y + (ox + x) * Height] = palcol[(yslice >> (x + x)) & 3]; Pixels[oy + y + (ox + x) * Height] = palcol[ci];
} }
else else
{ {
BYTE * tcp = &tcbuf[ox + x + (oy + y) * Width*4]; BYTE * tcp = &tcbuf[(ox + x)*4 + (oy + y) * Width*4];
int c = (yslice >> (x + x)) & 3; tcp[0] = color[ci].r;
tcp[0] = color[c].r; tcp[1] = color[ci].g;
tcp[1] = color[c].g; tcp[2] = color[ci].b;
tcp[2] = color[c].b; tcp[3] = color[ci].a;
tcp[3] = color[c].a;
} }
} }
} }
@ -740,7 +740,7 @@ void FDDSTexture::DecompressDXT3 (FWadLump &lump, bool premultiplied, BYTE *tcbu
} }
else else
{ {
BYTE * tcp = &tcbuf[ox + x + (oy + y) * Width*4]; BYTE * tcp = &tcbuf[(ox + x)*4 + (oy + y) * Width*4];
int c = (yslice >> (x + x)) & 3; int c = (yslice >> (x + x)) & 3;
tcp[0] = color[c].r; tcp[0] = color[c].r;
tcp[1] = color[c].g; tcp[1] = color[c].g;
@ -831,7 +831,7 @@ void FDDSTexture::DecompressDXT5 (FWadLump &lump, bool premultiplied, BYTE *tcbu
break; break;
} }
// Alpha values are stored in 3 bytes for 2 rows // Alpha values are stored in 3 bytes for 2 rows
if ((y & 1) == 0) if ((y & 0) == 0)
{ {
yalphaslice = block[y*3] | (block[y*3+1] << 8) | (block[y*3+2] << 16); yalphaslice = block[y*3] | (block[y*3+1] << 8) | (block[y*3+2] << 16);
} }
@ -853,7 +853,7 @@ void FDDSTexture::DecompressDXT5 (FWadLump &lump, bool premultiplied, BYTE *tcbu
} }
else else
{ {
BYTE * tcp = &tcbuf[ox + x + (oy + y) * Width*4]; BYTE * tcp = &tcbuf[(ox + x)*4 + (oy + y) * Width*4];
int c = (yslice >> (x + x)) & 3; int c = (yslice >> (x + x)) & 3;
tcp[0] = color[c].r; tcp[0] = color[c].r;
tcp[1] = color[c].g; tcp[1] = color[c].g;