public void SaveToFile(string filePath) { var size = 2 * sizeof(int) + verts.Count * 3 * sizeof(float) + indices.Count * sizeof(int); try { using (var mmf = MemoryMappedFile.CreateFromFile(filePath, FileMode.Create, null, size)) { using (var accessor = mmf.CreateViewAccessor(0, size)) { accessor.Write(0, verts.Count); accessor.Write(sizeof(int), indices.Count); long pos = 2 * sizeof(int); for (var i = 0; i < verts.Count; ++i) { TreeUtility.MmvaWriteVector3(verts[i], accessor, ref pos); } for (var i = 0; i < indices.Count; ++i) { accessor.Write(pos, indices[i]); pos += sizeof(int); } } } } catch (Exception e) { Debug.LogError($"Exception was thrown when saving file {filePath}\n{e.Message}"); throw; } }
public static MeshData LoadFromFile(string filePath) { if (!File.Exists(filePath)) { throw new FileNotFoundException($"Mesh file under {filePath} not found."); } var size = new FileInfo(filePath).Length; var data = new MeshData(); using (var mmf = MemoryMappedFile.CreateFromFile(filePath, FileMode.Open)) { using (var accessor = mmf.CreateViewAccessor(0, size)) { accessor.Read(0, out int vertCount); accessor.Read(sizeof(int), out int indicesCount); data.verts.Capacity = vertCount; data.indices.Capacity = indicesCount; long pos = sizeof(int) * 2; for (var i = 0; i < vertCount; ++i) { data.verts.Add(TreeUtility.MmvaReadVector3(accessor, ref pos)); } for (var i = 0; i < indicesCount; ++i) { accessor.Read(pos, out int index); data.indices.Add(index); pos += sizeof(int); } } } return(data); }
public static MeshData LoadFromFile(string filePath, long offset, long size) { if (!File.Exists(filePath)) { throw new FileNotFoundException($"Mesh file under {filePath} not found."); } var data = new MeshData(); using (var mmf = MemoryMappedFile.CreateFromFile(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read), null, 0L, MemoryMappedFileAccess.Read, HandleInheritability.None, false)) { using (var accessor = mmf.CreateViewAccessor(offset, size, MemoryMappedFileAccess.Read)) { accessor.Read(0, out int vertCount); accessor.Read(sizeof(int), out int indicesCount); data.verts.Capacity = vertCount; data.indices.Capacity = indicesCount; long pos = sizeof(int) * 2; for (var i = 0; i < vertCount; ++i) { data.verts.Add(TreeUtility.MmvaReadVector3(accessor, ref pos)); } for (var i = 0; i < indicesCount; ++i) { accessor.Read(pos, out int index); data.indices.Add(index); pos += sizeof(int); } } } return(data); }