private static void WriteMaterial(XMaterial material, XofFileSaveObject saveObject) { byte[] data = BuildMaterialData(material); using (var child = saveObject.AddData(XofFileDefaultTemplates.MaterialId, material.Name, null, data)) { WriteMaterialChildren(material, child); } }
private static void WriteMaterialChildren(XMaterial material, XofFileSaveData child) { if (!string.IsNullOrEmpty(material.Filename)) { WriteTextureFilename(material.Filename, child); } if (material.EffectInstance != null) { WriteEffectInstance(material.EffectInstance, child); } }
private static void WriteMaterial(XMaterial material, XofFileSaveData saveData) { if (material.IsReference) { saveData.AddDataReference(material.Name, null); } else { byte[] data = BuildMaterialData(material); using (var child = saveData.AddData(XofFileDefaultTemplates.MaterialId, material.Name, null, data)) { WriteMaterialChildren(material, child); } } }
private static byte[] BuildMaterialData(XMaterial material) { byte[] data; using (var ms = new MemoryStream()) using (var writer = new BinaryWriter(ms)) { WriteColorRgba(material.FaceColor, writer); writer.Write(material.Power); WriteColorRgb(material.SpecularColor, writer); WriteColorRgb(material.EmissiveColor, writer); data = ms.ToArray(); } return(data); }
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); }