예제 #1
0
        public static object ReadHeader(Stream data)
        {
            var baseHeader = data.ReadStruct <BaseHeader>();
            var baseSize   = Marshal.SizeOf <BaseHeader>();

            if (baseHeader.size < baseSize)
            {
                throw new Exception("Unexpected header size");
            }

            if (baseHeader.size == baseSize)
            {
                return(baseHeader);
            }

            if (baseHeader.platformId.Value == 0x44583131)
            {
                //dx11 platform
                var         dx11Size        = Marshal.SizeOf <DX11Header>();
                var         extraBytesCount = dx11Size - baseSize;
                var         extraBytes      = data.ReadBytes(extraBytesCount);
                var         baseBytes       = MemoryUtils.StructToBytes(baseHeader);
                List <byte> dx11Bytes       = new List <byte>();
                dx11Bytes.AddRange(baseBytes);
                dx11Bytes.AddRange(extraBytes);
                return(MemoryUtils.BytesToStruct <DX11Header>(dx11Bytes.ToArray()));
            }
            throw new Exception("Unknown platform");
        }