public static TexFormat GetUncompressedType(DDS dds, byte[] Components, bool IsRGB, bool HasAlpha, bool HasLuminance, DDS.DDSPFHeader header) { uint bpp = header.RgbBitCount; uint RedMask = header.RBitMask; uint GreenMask = header.GBitMask; uint BlueMask = header.BBitMask; uint AlphaMask = HasAlpha ? header.ABitMask : 0; if (HasLuminance) { throw new Exception("Luminance not supported!"); } else if (IsRGB) { if (bpp == 16) { if (RedMask == A1R5G5B5_MASKS[0] && GreenMask == A1R5G5B5_MASKS[1] && BlueMask == A1R5G5B5_MASKS[2] && AlphaMask == A1R5G5B5_MASKS[3]) { return(TexFormat.BGR5A1_UNORM); } else if (RedMask == X1R5G5B5_MASKS[0] && GreenMask == X1R5G5B5_MASKS[1] && BlueMask == X1R5G5B5_MASKS[2] && AlphaMask == X1R5G5B5_MASKS[3]) { return(TexFormat.RGB565_UNORM); } else if (RedMask == A4R4G4B4_MASKS[0] && GreenMask == A4R4G4B4_MASKS[1] && BlueMask == A4R4G4B4_MASKS[2] && AlphaMask == A4R4G4B4_MASKS[3]) { return(TexFormat.RGBA4_UNORM); } else if (RedMask == X4R4G4B4_MASKS[0] && GreenMask == X4R4G4B4_MASKS[1] && BlueMask == X4R4G4B4_MASKS[2] && AlphaMask == X4R4G4B4_MASKS[3]) { return(TexFormat.RGBA4_UNORM); } else if (RedMask == R5G6B5_MASKS[0] && GreenMask == R5G6B5_MASKS[1] && BlueMask == R5G6B5_MASKS[2] && AlphaMask == R5G6B5_MASKS[3]) { return(TexFormat.RGB565_UNORM); } else { throw new Exception("Unsupported 16 bit image!"); } } else if (bpp == 24) { if (RedMask == R8G8B8_MASKS[0] && GreenMask == R8G8B8_MASKS[1] && BlueMask == R8G8B8_MASKS[2] && AlphaMask == R8G8B8_MASKS[3]) { // dds.bdata = ConvertToRgba(this, "RGB8", 3, new byte[4] { 2, 1, 0, 3 }); return(TexFormat.RGB8_UNORM); } else { throw new Exception("Unsupported 24 bit image!"); } } else if (bpp == 32) { if (RedMask == A8B8G8R8_MASKS[0] && GreenMask == A8B8G8R8_MASKS[1] && BlueMask == A8B8G8R8_MASKS[2] && AlphaMask == A8B8G8R8_MASKS[3]) { return(TexFormat.RGBA8_UNORM); } else if (RedMask == X8B8G8R8_MASKS[0] && GreenMask == X8B8G8R8_MASKS[1] && BlueMask == X8B8G8R8_MASKS[2] && AlphaMask == X8B8G8R8_MASKS[3]) { //dds.bdata = ConvertToRgba(this, "RGB8X", 4, new byte[4] { 2, 1, 0, 3 }); return(TexFormat.BGRX8_UNORM); } else if (RedMask == A8R8G8B8_MASKS[0] && GreenMask == A8R8G8B8_MASKS[1] && BlueMask == A8R8G8B8_MASKS[2] && AlphaMask == A8R8G8B8_MASKS[3]) { //dds.bdata = ConvertBgraToRgba(dds.bdata); return(TexFormat.RGBA8_UNORM); } else if (RedMask == X8R8G8B8_MASKS[0] && GreenMask == X8R8G8B8_MASKS[1] && BlueMask == X8R8G8B8_MASKS[2] && AlphaMask == X8R8G8B8_MASKS[3]) { // dds.bdata = ConvertToRgba(this, "RGB8X", 4, new byte[4] { 0, 1, 2, 3 }); return(TexFormat.BGRX8_UNORM); } else { throw new Exception("Unsupported 32 bit image!"); } } } else { throw new Exception("Unknown type!"); } return(TexFormat.UNKNOWN); }
public static TexFormat GetUncompressedType(DDS dds, byte[] Components, bool IsRGB, bool HasAlpha, bool HasLuminance, DDS.DDSPFHeader header) { uint bpp = header.RgbBitCount; uint RedMask = header.RBitMask; uint GreenMask = header.GBitMask; uint BlueMask = header.BBitMask; uint AlphaMask = HasAlpha ? header.ABitMask : 0; uint[] maskRGBA = new uint[4] { RedMask, GreenMask, BlueMask, AlphaMask }; if (HasLuminance) { throw new Exception("Luminance not supported!"); } else if (IsRGB) { if (bpp == 16) { if (IsMatch(maskRGBA, A1R5G5B5_MASKS)) { return(TexFormat.BGR5A1_UNORM); } else if (IsMatch(maskRGBA, X1R5G5B5_MASKS)) { return(TexFormat.RGB565_UNORM); } else if (IsMatch(maskRGBA, A4R4G4B4_MASKS)) { return(TexFormat.RGBA4_UNORM); } else if (IsMatch(maskRGBA, X4R4G4B4_MASKS)) { return(TexFormat.RGBA4_UNORM); } else if (IsMatch(maskRGBA, R5G6B5_MASKS)) { return(TexFormat.RGB565_UNORM); } else { throw new Exception("Unsupported 16 bit image!"); } } else if (bpp == 24) { if (IsMatch(maskRGBA, R8G8B8_MASKS)) { return(TexFormat.RGB8_UNORM); } else { throw new Exception("Unsupported 24 bit image!"); } } else if (bpp == 32) { if (IsMatch(maskRGBA, A8B8G8R8_MASKS)) { return(TexFormat.RGBA8_UNORM); } else if (IsMatch(maskRGBA, X8B8G8R8_MASKS)) { return(TexFormat.BGRX8_UNORM); } else if (IsMatch(maskRGBA, A8R8G8B8_MASKS)) { return(TexFormat.BGRA8_UNORM); } else if (IsMatch(maskRGBA, X8R8G8B8_MASKS)) { return(TexFormat.BGRX8_UNORM); } else { throw new Exception("Unsupported 32 bit image!"); } } } else { throw new Exception("Unknown type!"); } return(TexFormat.UNKNOWN); }