private static XMaterial ReadMaterial(XofFileEnumData enumData) { var material = new XMaterial { Name = enumData.GetName() }; if (enumData.IsReference()) { material.IsReference = true; return(material); } byte[] data = enumData.GetData(); using (var ms = new MemoryStream(data, false)) using (var reader = new BinaryReader(ms)) { material.FaceColor = ReadColorRgba(reader); material.Power = reader.ReadSingle(); material.SpecularColor = ReadColorRgb(reader); material.EmissiveColor = ReadColorRgb(reader); if (ms.Position != ms.Length) { throw new InvalidDataException(); } } bool textureFilenameRead = false; bool effectInstanceRead = false; int childrenCount = enumData.GetChildrenCount(); for (int childIndex = 0; childIndex < childrenCount; childIndex++) { using (var child = enumData.GetChild(childIndex)) { Guid type = child.GetTemplateType(); if (type == XofFileDefaultTemplates.TextureFilenameId) { if (textureFilenameRead) { throw new InvalidDataException(); } material.Filename = ReadTextureFilename(child); textureFilenameRead = true; } else if (type == XofFileDefaultTemplates.EffectInstanceId) { if (effectInstanceRead) { throw new InvalidDataException(); } material.EffectInstance = ReadEffectInstance(child); effectInstanceRead = true; } else { throw new InvalidDataException(); } } } return(material); }