public static int CalculatePitchOrLinearSize(int width, int height, DDSPixelFormatFourCC format, out DDSHeaderFlags additionalFlags) { if (IsBlockCompressed(format)) { additionalFlags = DDSHeaderFlags.LinearSize; return(CalculateLinearSize(width, height, format)); } additionalFlags = DDSHeaderFlags.Pitch; return(CalculatePitch(width, format)); }
public DDSTextureImporter(byte[] data) { var converter = new EndianBitConverter(); uint magic = converter.ToUInt32(data, 0); if (magic != DwMagic) { converter.InvertEndian = true; magic = converter.ToUInt32(data, 0); if (magic != DwMagic) { throw new Exception("Invalid DDS Texture."); } } HeaderSize = converter.ToUInt32(data, 4); Flags = (DDSHeaderFlags)converter.ToUInt32(data, 8); Height = converter.ToUInt32(data, 12); Width = converter.ToUInt32(data, 16); PitchOrLinearSize = converter.ToUInt32(data, 20); Depth = converter.ToUInt32(data, 24); MipMapCount = converter.ToUInt32(data, 28); PixelFormat.Size = converter.ToUInt32(data, 76); PixelFormat.Flags = (DDSPixelFormatFlags)converter.ToUInt32(data, 80); converter.InvertEndian = true; PixelFormat.FourCC = (DDSFormat)converter.ToUInt32(data, 84); converter.InvertEndian = false; PixelFormat.RGBBitCount = converter.ToUInt32(data, 88); PixelFormat.RBitMask = converter.ToUInt32(data, 92); PixelFormat.GBitMask = converter.ToUInt32(data, 96); PixelFormat.BBitMask = converter.ToUInt32(data, 100); PixelFormat.ABitMask = converter.ToUInt32(data, 104); Caps = converter.ToUInt32(data, 108); Caps2 = converter.ToUInt32(data, 112); RawTextureData = new byte[data.Length - 128]; Buffer.BlockCopy(data, 128, RawTextureData, 0, data.Length - 128); }