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));
        }
示例#2
0
        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);
        }