Utility/PixelFormat: Fix mask bit orders

This commit is contained in:
Lynix 2016-11-18 01:15:36 +01:00
parent 964d16f907
commit 93a2e54667
2 changed files with 11 additions and 16 deletions

View File

@ -39,18 +39,8 @@ namespace Nz
} }
inline PixelFormatInfo::PixelFormatInfo(const String& formatName, PixelFormatContent formatContent, Bitset<> rMask, Bitset<> gMask, Bitset<> bMask, Bitset<> aMask, PixelFormatSubType subType) : inline PixelFormatInfo::PixelFormatInfo(const String& formatName, PixelFormatContent formatContent, Bitset<> rMask, Bitset<> gMask, Bitset<> bMask, Bitset<> aMask, PixelFormatSubType subType) :
redMask(rMask), PixelFormatInfo(formatName, formatContent, subType, rMask, subType, gMask, subType, bMask, subType, aMask)
greenMask(gMask),
blueMask(bMask),
alphaMask(aMask),
content(formatContent),
redType(subType),
greenType(subType),
blueType(subType),
alphaType(subType),
name(formatName)
{ {
RecomputeBitsPerPixel();
} }
inline PixelFormatInfo::PixelFormatInfo(const String& formatName, PixelFormatContent formatContent, PixelFormatSubType rType, Bitset<> rMask, PixelFormatSubType gType, Bitset<> gMask, PixelFormatSubType bType, Bitset<> bMask, PixelFormatSubType aType, Bitset<> aMask, UInt8 bpp) : inline PixelFormatInfo::PixelFormatInfo(const String& formatName, PixelFormatContent formatContent, PixelFormatSubType rType, Bitset<> rMask, PixelFormatSubType gType, Bitset<> gMask, PixelFormatSubType bType, Bitset<> bMask, PixelFormatSubType aType, Bitset<> aMask, UInt8 bpp) :
@ -65,6 +55,11 @@ namespace Nz
alphaType(aType), alphaType(aType),
name(formatName) name(formatName)
{ {
redMask.Reverse();
greenMask.Reverse();
blueMask.Reverse();
alphaMask.Reverse();
if (bpp == 0) if (bpp == 0)
RecomputeBitsPerPixel(); RecomputeBitsPerPixel();
} }

View File

@ -174,15 +174,15 @@ namespace Nz
if (header.format.flags & DDPF_RGB) if (header.format.flags & DDPF_RGB)
{ {
// Reverse bits for our masks // Reverse bits for our masks
info.redMask = ReverseBits(header.format.redMask); info.redMask = header.format.redMask;
info.greenMask = ReverseBits(header.format.greenMask); info.greenMask = header.format.greenMask;
info.blueMask = ReverseBits(header.format.blueMask); info.blueMask = header.format.blueMask;
} }
else if (header.format.flags & DDPF_LUMINANCE) else if (header.format.flags & DDPF_LUMINANCE)
info.redMask = ReverseBits(header.format.redMask); info.redMask = header.format.redMask;
if (header.format.flags & (DDPF_ALPHA | DDPF_ALPHAPIXELS)) if (header.format.flags & (DDPF_ALPHA | DDPF_ALPHAPIXELS))
info.alphaMask = ReverseBits(header.format.alphaMask); info.alphaMask = header.format.alphaMask;
*format = PixelFormat::IdentifyFormat(info); *format = PixelFormat::IdentifyFormat(info);
if (!PixelFormat::IsValid(*format)) if (!PixelFormat::IsValid(*format))