public static void Save(Stream stream, bool compress, SoftwareModel softwareModel, bool loadColors, bool loadUVs, bool loadNormals) { var writer = new BinaryWriter(stream); // meta data writer.Write(Streams.MakeFourCC('R', 'M', 'F', 'T')); // tag writer.Write(1.0f); // version writer.Write(false); //compress);// TODO: add zip compression // frames writer.Write(softwareModel.FrameStart); writer.Write(softwareModel.FrameEnd); writer.Write(softwareModel.FPS); // materials writer.Write(softwareModel.Materials.Count); foreach (var material in softwareModel.Materials) { writer.Write(material.Name); // values1 writer.Write(material.Values1.Count); foreach (var value in material.Values1) { writer.Write(value.Key); writer.Write(value.Value); } // values2 writer.Write(material.Values2.Count); foreach (var value in material.Values2) { writer.Write(value.Key); writer.WriteVector(value.Value); } // values3 writer.Write(material.Values3.Count); foreach (var value in material.Values3) { writer.Write(value.Key); writer.WriteVector(value.Value); } // values4 writer.Write(material.Values4.Count); foreach (var value in material.Values4) { writer.Write(value.Key); writer.WriteVector(value.Value); } // textures writer.Write(material.Textures.Count); foreach (var texture in material.Textures) { writer.Write(texture.Key); writer.Write(texture.Value); } } // meshes writer.Write(softwareModel.Meshes.Count); foreach (var mesh in softwareModel.Meshes) { Mesh.Write(writer, softwareModel, mesh, loadColors, loadUVs, loadNormals); } // actions writer.Write(softwareModel.Actions.Count); foreach (var action in softwareModel.Actions) { Action.Write(writer, action); } // armatures writer.Write(softwareModel.Armatures.Count); foreach (var armature in softwareModel.Armatures) { Armature.Write(writer, armature); } // objects writer.Write(softwareModel.Objects.Count); foreach (var o in softwareModel.Objects) { Object.Write(writer, o); } }