public Mesh (MemoryBlock vertices, VertexLayout decl, ushort[] indices) { var group = new MeshGroup(); group.VertexBuffer = new VertexBuffer(vertices, decl); group.IndexBuffer = new IndexBuffer(MemoryBlock.FromArray(indices)); vertexDecl = decl; groups = new List<MeshGroup> { group }; }
public unsafe static Mesh LoadMesh(string fileName) { var path = Path.Combine(RootPath, "meshes/", fileName); var groups = new List <MeshGroup>(); var group = new MeshGroup(); VertexLayout layout = null; using (var reader = new MemoryReader(File.ReadAllBytes(path))) { while (!reader.Done) { var tag = reader.Read <uint>(); if (tag == ChunkTagVB) { // skip bounding volume info reader.Skip(BoundingVolumeSize); layout = ReadVertexLayout(reader); var vertexCount = reader.Read <ushort>(); var vertexData = reader.ReadArray <byte>(vertexCount * layout.Stride); group.VertexBuffer = new VertexBuffer(MemoryBlock.FromArray(vertexData), layout); } else if (tag == ChunkTagIB) { var indexCount = reader.Read <uint>(); var indexData = reader.ReadArray <ushort>((int)indexCount); group.IndexBuffer = new IndexBuffer(MemoryBlock.FromArray(indexData)); } else if (tag == ChunkTagPri) { // skip material name var len = reader.Read <ushort>(); reader.Skip(len); // read primitive data var count = reader.Read <ushort>(); for (int i = 0; i < count; i++) { // skip name len = reader.Read <ushort>(); reader.Skip(len); var prim = reader.Read <Primitive>(); group.Primitives.Add(prim); // skip bounding volumes reader.Skip(BoundingVolumeSize); } groups.Add(group); group = new MeshGroup(); } } } return(new Mesh(layout, groups)); }
public Mesh(MemoryBlock vertices, VertexLayout decl, ushort[] indices) { var group = new MeshGroup(); group.VertexBuffer = new VertexBuffer(vertices, decl); group.IndexBuffer = new IndexBuffer(MemoryBlock.FromArray(indices)); vertexDecl = decl; groups = new List <MeshGroup> { group }; }
public static Mesh LoadMesh(string fileName) { var path = Path.Combine(RootPath, "meshes/", fileName); var groups = new List <MeshGroup>(); var group = new MeshGroup(); VertexLayout layout = null; using (var file = MemoryMappedFile.CreateFromFile(path)) { var reader = file.CreateViewAccessor(); var bytes = new FileInfo(path).Length; var index = 0; while (index < bytes) { var tag = reader.ReadUInt32(index); index += sizeof(uint); if (tag == ChunkTagVB) { // skip bounding volume info index += BoundingVolumeSize; layout = reader.ReadVertexLayout(ref index); var vertexCount = reader.ReadUInt16(ref index); var vertexData = reader.ReadArray <byte>(vertexCount * layout.Stride, ref index); group.VertexBuffer = new VertexBuffer(MemoryBlock.FromArray(vertexData), layout); } else if (tag == ChunkTagIB) { var indexCount = reader.ReadUInt32(ref index); var indexData = reader.ReadArray <ushort>((int)indexCount, ref index); group.IndexBuffer = new IndexBuffer(MemoryBlock.FromArray(indexData)); } else if (tag == ChunkTagPri) { // skip material name var len = reader.ReadUInt16(ref index); index += len; // read primitive data var count = reader.ReadUInt16(ref index); for (int i = 0; i < count; i++) { // skip name len = reader.ReadUInt16(ref index); index += len; var prim = reader.Read <Primitive>(ref index); group.Primitives.Add(prim); // skip bounding volumes index += BoundingVolumeSize; } groups.Add(group); group = new MeshGroup(); } } } return(new Mesh(layout, groups)); }