Example #1
0
        public void Parse(Stream s)
        {
            if (s == null)
            {
                return;
            }
            BinaryReader r = new BinaryReader(s);

            info            = new RLEInfo(s);
            this.MipHeaders = new MipHeader[this.info.mipCount + 1];

            for (int i = 0; i < this.info.mipCount; i++)
            {
                MipHeaders[i] = new MipHeader
                {
                    CommandOffset = r.ReadInt32(),
                    Offset2       = r.ReadInt32(),
                    Offset3       = r.ReadInt32(),
                    Offset0       = r.ReadInt32(),
                    Offset1       = r.ReadInt32(),
                };
            }

            this.MipHeaders[this.info.mipCount] = new MipHeader
            {
                CommandOffset = MipHeaders[0].Offset2,
                Offset2       = MipHeaders[0].Offset3,
                Offset3       = MipHeaders[0].Offset0,
                Offset0       = MipHeaders[0].Offset1,
                Offset1       = (int)s.Length,
            };
            s.Position = 0;
            this.data  = r.ReadBytes((int)s.Length);
        }
        public void Parse(Stream s)
        {
            if (s == null || s.Length == 0)
            {
                this.data = new byte[0]; return;
            }
            BinaryReader r = new BinaryReader(s);

            info            = new RLEInfo(s);
            this.MipHeaders = new MipHeader[this.info.mipCount + 1];

            for (int i = 0; i < this.info.mipCount; i++)
            {
                var header = new MipHeader
                {
                    CommandOffset = r.ReadInt32(),
                    Offset2       = r.ReadInt32(),
                    Offset3       = r.ReadInt32(),
                    Offset0       = r.ReadInt32(),
                    Offset1       = r.ReadInt32(),
                };
                if (this.info.Version == RLEVersion.RLES)
                {
                    header.Offset4 = r.ReadInt32();
                }
                MipHeaders[i] = header;
            }

            this.MipHeaders[this.info.mipCount] = new MipHeader
            {
                CommandOffset = MipHeaders[0].Offset2,
                Offset2       = MipHeaders[0].Offset3,
                Offset3       = MipHeaders[0].Offset0,
                Offset0       = MipHeaders[0].Offset1,
            };

            if (this.info.Version == RLEVersion.RLES)
            {
                this.MipHeaders[this.info.mipCount].Offset1 = this.MipHeaders[0].Offset4;
                this.MipHeaders[this.info.mipCount].Offset4 = (int)s.Length;
            }
            else
            {
                this.MipHeaders[this.info.mipCount].Offset1 = (int)s.Length;
            }

            s.Position = 0;
            this.data  = r.ReadBytes((int)s.Length);
        }