Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }