protected HexMapMesh(GraphicsDevice gd, List <Hexagon> hexes, IGeometryBuilder builder, Texture2D texture) { Interlocked.Increment(ref meshCounter); Texture = texture; Hexes = hexes; PatchID = meshCounter; Vertices = new List <VertexPositionNormalTexture>(); Indices = new List <uint>(); TriangleCount = hexes.Count * 6; HexSize = hexes[0].Geometry.HexWidth; foreach (var hexagon in hexes) { hexagon.PatchID = PatchID; } builder.BuildGeometry(hexes, Vertices, Indices); BoundingBox = hexes[0].Geometry.BoundingBox; foreach (var hexagon in hexes.Skip(1)) { BoundingBox = BoundingBox.CreateMerged(BoundingBox, hexagon.Geometry.BoundingBox); } VertexBuffer = new VertexBuffer(gd, typeof(VertexPositionNormalTexture), Vertices.Count, BufferUsage.WriteOnly); var vpcs = Vertices.ToArray(); builder.GenerateNormals(vpcs, Indices); VertexBuffer.SetData(vpcs); IndexBuffer = new IndexBuffer(gd, IndexElementSize.ThirtyTwoBits, Indices.Count, BufferUsage.WriteOnly); IndexBuffer.SetData(Indices.ToArray()); Grid = new HexGrid(gd, Hexes, Color.Gray); }