Fixed: Decoding dds with improper width/height
--HG-- branch : develop
This commit is contained in:
parent
c228349098
commit
e2617bfe9b
1 changed files with 24 additions and 12 deletions
|
@ -1356,10 +1356,14 @@ bool CBitmap::decompressDXT1(bool alpha)
|
||||||
{
|
{
|
||||||
for(k=0; k<4; k++)
|
for(k=0; k<4; k++)
|
||||||
{
|
{
|
||||||
dataTmp[m][pixelsCount + j*wtmp*4 + 4*k]= c[bits&3].R;
|
uint32 index = pixelsCount + (j*wtmp+k)*4;
|
||||||
dataTmp[m][pixelsCount + j*wtmp*4 + 4*k+1]= c[bits&3].G;
|
// incase input image does not have proper width/height
|
||||||
dataTmp[m][pixelsCount + j*wtmp*4 + 4*k+2]= c[bits&3].B;
|
if (index+3 > mipMapSz) break;
|
||||||
dataTmp[m][pixelsCount + j*wtmp*4 + 4*k+3]= c[bits&3].A;
|
|
||||||
|
dataTmp[m][index+0]= c[bits&3].R;
|
||||||
|
dataTmp[m][index+1]= c[bits&3].G;
|
||||||
|
dataTmp[m][index+2]= c[bits&3].B;
|
||||||
|
dataTmp[m][index+3]= c[bits&3].A;
|
||||||
bits>>=2;
|
bits>>=2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1466,10 +1470,14 @@ bool CBitmap::decompressDXT3()
|
||||||
{
|
{
|
||||||
for(k=0; k<4; k++)
|
for(k=0; k<4; k++)
|
||||||
{
|
{
|
||||||
dataTmp[m][pixelsCount + j*wtmp*4 + 4*k]= c[bits&3].R;
|
uint32 index = pixelsCount + (j*wtmp+k)*4;
|
||||||
dataTmp[m][pixelsCount + j*wtmp*4 + 4*k+1]= c[bits&3].G;
|
// incase input image does not have proper width/height
|
||||||
dataTmp[m][pixelsCount + j*wtmp*4 + 4*k+2]= c[bits&3].B;
|
if (index+3 > mipMapSz) break;
|
||||||
dataTmp[m][pixelsCount + j*wtmp*4 + 4*k+3]= alpha[4*j+k];
|
|
||||||
|
dataTmp[m][index+0]= c[bits&3].R;
|
||||||
|
dataTmp[m][index+1]= c[bits&3].G;
|
||||||
|
dataTmp[m][index+2]= c[bits&3].B;
|
||||||
|
dataTmp[m][index+3]= alpha[4*j+k];
|
||||||
bits>>=2;
|
bits>>=2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1602,10 +1610,14 @@ bool CBitmap::decompressDXT5()
|
||||||
{
|
{
|
||||||
for(k=0; k<4; k++)
|
for(k=0; k<4; k++)
|
||||||
{
|
{
|
||||||
dataTmp[m][pixelsCount + (j*wtmp+k)*4 +0]= c[bits&3].R;
|
uint32 index = pixelsCount + (j*wtmp+k)*4;
|
||||||
dataTmp[m][pixelsCount + (j*wtmp+k)*4 +1]= c[bits&3].G;
|
// incase input image does not have proper width/height
|
||||||
dataTmp[m][pixelsCount + (j*wtmp+k)*4 +2]= c[bits&3].B;
|
if (index+3 > mipMapSz) break;
|
||||||
dataTmp[m][pixelsCount + (j*wtmp+k)*4 +3]= (uint8) alpha[codeAlpha[4*j+k]];
|
|
||||||
|
dataTmp[m][index+0]= c[bits&3].R;
|
||||||
|
dataTmp[m][index+1]= c[bits&3].G;
|
||||||
|
dataTmp[m][index+2]= c[bits&3].B;
|
||||||
|
dataTmp[m][index+3]= (uint8) alpha[codeAlpha[4*j+k]];
|
||||||
bits>>=2;
|
bits>>=2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue