示例#1
0
文件: u3d.cs 项目: Klanly/ncnn
        public unsafe void Load(Stream reader, SerializedFileHeader Head, ABheader ab)
        {
            isAB   = ab;
            Header = Head;

            long cur = rStart[0] = (int)reader.Position;

            byte[] buf = reader.ReadBytes(0x10);

            string VersionString;

            cur += buf.strlen(out VersionString) + 1;
            VerParse(VersionString);

            reader.Position = cur;

            MetaParse(reader, Header.m_Endianess.a != 0);

            foreach (var oo in Content)
            {
                oo.Load(reader);
            }

            reader.Close();
        }
示例#2
0
文件: u3d.cs 项目: Klanly/ncnn
        public static unsafe SerializedFile Create(string path, SerializedFile src)
        {
            Stream reader = File.OpenRead(path);

            if (reader.Length < 0x14)
            {
                reader.Close();
                return(null);
            }

            byte[] buf = reader.ReadBytes(0x30, 0, 0x14);

            ABheader abhh = null;

            if (buf.ru4(0) == 0x74696e55)
            {
                abhh   = new ABheader(reader);
                reader = abhh.reNewReader();

                buf = reader.ReadBytes(0x30, 0, 0x14);
            }

            var tmpHeader = new SerializedFileHeader();

            fixed(byte *srcbb = &buf[0])
            {
                bswap *bs  = (bswap *)srcbb;
                uint   ver = bs[2]._1u();

                tmpHeader.m_Version   = ver;
                tmpHeader.m_Endianess = bs[4];
                if (ver >= 0x16)
                {
                    reader.Read(buf, 0x14, 0x1C);
                    bswap8 *bs8 = (bswap8 *)srcbb;

                    tmpHeader.v16h_0 = bs8[0];
                    tmpHeader.v16h_C = bs[3];

                    tmpHeader.m_MetadataSize = bs[5]._1u();
                    tmpHeader.m_FileSize     = bs8[3]._1u();
                    tmpHeader.m_DataOffset   = bs8[4]._1i();

                    tmpHeader.v16h_28 = bs[10];
                    tmpHeader.v16h_2C = bs[11];
                }
                else
                {
                    tmpHeader.m_MetadataSize = bs[0]._1u();
                    tmpHeader.m_FileSize     = bs[1]._1u();

                    tmpHeader.m_DataOffset = bs[3]._1u();
                    if (ver < 9)
                    {
                    }
                }
            }

            long cur = reader.Length;

            if (tmpHeader.m_MetadataSize >= cur || tmpHeader.m_DataOffset >= cur)
            {
                return(null);
            }


            //if(abhh.resSraw<0)
            //	abhh.resSloc(tmpHeader.m_FileSize);


            if (src == null)
            {
                return(new SerializedFile(reader, tmpHeader, abhh));
            }
            else
            {
                src.Load(reader, tmpHeader, abhh);
                return(src);
            }
        }
示例#3
0
文件: u3d.cs 项目: Klanly/ncnn
 public SerializedFile(Stream reader, SerializedFileHeader Head, ABheader ab)
 {
     Load(reader, Head, ab);
 }