private static List <IndexedVertexData <T> > GetMergedContainers <T>(List <IndexedVertexData <T> > containersToMerge) where T : struct { // Combining indices isn't supported for all types currently. PrimitiveType type = containersToMerge.First().PrimitiveType; if (!supportedTypes.Contains(type)) { return(containersToMerge); } // Estimate the correct size to avoid costly array resize/copy operations. int indexCount = containersToMerge.First().Indices.Count *containersToMerge.Count; int vertexCount = containersToMerge.First().Vertices.Count *containersToMerge.Count; List <int> indices = new List <int>(indexCount); List <T> vertices = new List <T>(vertexCount); foreach (var container in containersToMerge) { AddIndices(vertices.Count, container.Indices, type, indices); vertices.AddRange(container.Vertices); } var mergedContainer = new IndexedVertexData <T>(vertices, indices, type); return(new List <IndexedVertexData <T> >() { mergedContainer }); }
private static void AddVertexContainer(GXVertexDecompressor decom, List <IndexedVertexData <MeleeVertex> > vertexContainers, DatPolygon polygon, GXDisplayList displayList) { List <MeleeVertex> vertices = new List <MeleeVertex>(); List <int> vertexIndices = new List <int>(); for (int i = 0; i < displayList.Indices.Length; i++) { vertexIndices.Add(i); } vertices.AddRange(ConvertVerts(decom.GetFormattedVertices(displayList, polygon))); PrimitiveType primitiveType = MeleeDatToOpenGL.GetGLPrimitiveType(displayList.PrimitiveType); var vertexContainer = new IndexedVertexData <MeleeVertex>(vertices, vertexIndices, primitiveType); vertexContainers.Add(vertexContainer); }
public TestMesh(IndexedVertexData <float> vertexData) : base(vertexData) { }