From a1f7459a8d5d71c937973c870a9e5475c2c289d7 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sat, 20 Jun 2020 02:57:43 -0400 Subject: [PATCH] CTextureEncoder: Make use of unsigned stream helpers --- src/Core/Resource/Cooker/CTextureEncoder.cpp | 26 ++++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/Core/Resource/Cooker/CTextureEncoder.cpp b/src/Core/Resource/Cooker/CTextureEncoder.cpp index 2031e798..97b82077 100644 --- a/src/Core/Resource/Cooker/CTextureEncoder.cpp +++ b/src/Core/Resource/Cooker/CTextureEncoder.cpp @@ -6,10 +6,10 @@ CTextureEncoder::CTextureEncoder() = default; void CTextureEncoder::WriteTXTR(IOutputStream& rTXTR) { // Only DXT1->CMPR supported at the moment - rTXTR.WriteLong((uint) mOutputFormat); - rTXTR.WriteShort(mpTexture->mWidth); - rTXTR.WriteShort(mpTexture->mHeight); - rTXTR.WriteLong(mpTexture->mNumMipMaps); + rTXTR.WriteULong(static_cast(mOutputFormat)); + rTXTR.WriteUShort(mpTexture->mWidth); + rTXTR.WriteUShort(mpTexture->mHeight); + rTXTR.WriteULong(mpTexture->mNumMipMaps); uint32 MipW = mpTexture->Width() / 4; uint32 MipH = mpTexture->Height() / 4; @@ -19,8 +19,11 @@ void CTextureEncoder::WriteTXTR(IOutputStream& rTXTR) for (uint32 iMip = 0; iMip < mpTexture->mNumMipMaps; iMip++) { for (uint32 iBlockY = 0; iBlockY < MipH; iBlockY += 2) + { for (uint32 iBlockX = 0; iBlockX < MipW; iBlockX += 2) + { for (uint32 iImgY = iBlockY; iImgY < iBlockY + 2; iImgY++) + { for (uint32 iImgX = iBlockX; iImgX < iBlockX + 2; iImgX++) { uint32 SrcPos = ((iImgY * MipW) + iImgX) * 8; @@ -28,12 +31,19 @@ void CTextureEncoder::WriteTXTR(IOutputStream& rTXTR) ReadSubBlockCMPR(Image, rTXTR); } + } + } + } MipOffset += MipW * MipH * 8; MipW /= 2; MipH /= 2; - if (MipW < 2) MipW = 2; - if (MipH < 2) MipH = 2; + + if (MipW < 2) + MipW = 2; + + if (MipH < 2) + MipH = 2; } } @@ -49,9 +59,9 @@ void CTextureEncoder::ReadSubBlockCMPR(IInputStream& rSource, IOutputStream& rDe for (uint32 iByte = 0; iByte < 4; iByte++) { - uint8 Byte = rSource.ReadByte(); + uint8 Byte = rSource.ReadUByte(); Byte = ((Byte & 0x3) << 6) | ((Byte & 0xC) << 2) | ((Byte & 0x30) >> 2) | ((Byte & 0xC0) >> 6); - rDest.WriteByte(Byte); + rDest.WriteUByte(Byte); } }