Example #1
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);
        }
Example #2
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);
        }