public static uint ToFourCC(this CRNFormat format) { switch (format) { case CRNFormat.DXT1: return(FourCC('D', 'X', 'T', '1')); case CRNFormat.DXT3: return(FourCC('D', 'X', 'T', '3')); case CRNFormat.DXT5: return(FourCC('D', 'X', 'T', '5')); case CRNFormat.DXN_XY: return(FourCC('A', '2', 'X', 'Y')); case CRNFormat.DXN_YX: return(FourCC('A', 'T', 'I', '2')); case CRNFormat.DXT5A: return(FourCC('A', 'T', 'I', '1')); case CRNFormat.DXT5_CCxY: return(FourCC('C', 'C', 'x', 'Y')); case CRNFormat.DXT5_xGxR: return(FourCC('x', 'G', 'x', 'R')); case CRNFormat.DXT5_xGBR: return(FourCC('x', 'G', 'B', 'R')); case CRNFormat.DXT5_AGBR: return(FourCC('A', 'G', 'B', 'R')); case CRNFormat.ETC1: return(FourCC('E', 'T', 'C', '1')); case CRNFormat.ETC2: return(FourCC('E', 'T', 'C', '2')); case CRNFormat.ETC2A: return(FourCC('E', 'T', '2', 'A')); case CRNFormat.ETC1S: return(FourCC('E', 'T', '1', 'S')); case CRNFormat.ETC2AS: return(FourCC('E', '2', 'A', 'S')); default: break; } return(0); }
public CRNTextureImporter(byte[] data) { var converter = new EndianBitConverter(); uint sig = converter.ToUInt16(data, 0); if (sig != SigValue) { converter.InvertEndian = true; sig = converter.ToUInt16(data, 0); if (sig != SigValue) { throw new Exception("Invalid CRN Texture."); } } HeaderSize = converter.ToUInt16(data, 2); CRC16 = converter.ToUInt16(data, 4); DataSize = converter.ToUInt32(data, 6); DataCRC16 = converter.ToUInt16(data, 10); Width = converter.ToUInt16(data, 12); Height = converter.ToUInt16(data, 14); Levels = data[16]; Faces = data[17]; Format = (CRNFormat)data[18]; Flags = (CRNHeaderFlags)converter.ToUInt16(data, 19); UserData0 = converter.ToUInt32(data, 25); UserData1 = converter.ToUInt32(data, 29); byte[] dxtData = unitils.UnityCRN.Transcode(data); Texture2D tex; // Bad, prefer direct conversion instead of using Texture2D if (ImageConversion.LoadDDSImage(dxtData, out tex)) { RawTextureData = tex.GetRawTextureData(); } }