public ResourceEntry WriteTextureEntry(ResourceEntry entry, XPathNodeIterator nodes, string sdsFolder, XmlNode descNode) { //texture data storage. MemoryStream data = new MemoryStream(); TextureResource resource; byte[] texData; //read from xml. nodes.Current.MoveToNext(); string file = nodes.Current.Value; nodes.Current.MoveToNext(); byte hasMIP = Convert.ToByte(nodes.Current.Value); nodes.Current.MoveToNext(); entry.Version = Convert.ToUInt16(nodes.Current.Value); //do main stuff texData = File.ReadAllBytes(sdsFolder + "/" + file); resource = new TextureResource(FNV64.Hash(file), hasMIP, texData); //entry.SlotVramRequired = (uint)(texData.Length - 128); //if (hasMIP == 1) //{ // using (BinaryReader reader = new BinaryReader(File.Open(sdsFolder + "/MIP_" + file, FileMode.Open))) // entry.SlotVramRequired += (uint)(reader.BaseStream.Length - 128); //} resource.Serialize(entry.Version, data, Endian.Little); descNode.InnerText = file; entry.Version = Convert.ToUInt16(nodes.Current.Value); entry.Data = data.ToArray(); return(entry); }
public ResourceEntry WriteTextureEntry(ResourceEntry entry, XPathNodeIterator nodes, string sdsFolder, XmlNode descNode) { // We lack the file hash in M3 and M1: DE. So we have to get it from the file. bool bIsMaf3 = false; var game = GameStorage.Instance.GetSelectedGame(); if (game.GameType == GamesEnumerator.MafiaI_DE || game.GameType == GamesEnumerator.MafiaIII) { bIsMaf3 = true; } //read from xml. nodes.Current.MoveToNext(); string file = nodes.Current.Value; nodes.Current.MoveToNext(); ulong hash = 0; if (bIsMaf3) { string hashString = nodes.Current.ToString(); hash = Convert.ToUInt64(hashString); nodes.Current.MoveToNext(); } byte hasMIP = Convert.ToByte(nodes.Current.Value); nodes.Current.MoveToNext(); // Setup ResourceEntry MetaInfo. entry.Version = Convert.ToUInt16(nodes.Current.Value); descNode.InnerText = file; // Begin serialising the Texture Resource. TextureResource resource = new TextureResource(); // Create stream. using (MemoryStream stream = new MemoryStream()) { // Read the Texture file (.DDS). byte[] texData = File.ReadAllBytes(sdsFolder + "/" + file); resource = new TextureResource(FNV64.Hash(file), hasMIP, texData); // Do Version specific handling; if (bIsMaf3) { resource.NameHash = hash; } // Serialise to the TextureResource and pack it into the ResourceEntry. resource.Serialize(entry.Version, stream, _Endian); entry.Data = stream.ToArray(); // Configure VRAM information for the SDS. if (game.GameType == GamesEnumerator.MafiaII_DE || game.GameType == GamesEnumerator.MafiaII) { entry.SlotVramRequired = (uint)(texData.Length - 128); //if (hasMIP == 1) //{ // using (BinaryReader reader = new BinaryReader(File.Open(sdsFolder + "/MIP_" + file, FileMode.Open))) // entry.SlotVramRequired += (uint)(reader.BaseStream.Length - 128); //} } if (game.GameType == GamesEnumerator.MafiaI_DE) { var size = (resource.bIsDX10 ? 157 : 137); entry.OtherVramRequired = (uint)(stream.Length - size); } } return(entry); }