private void RebuildSegments() { VertexCount = 0; var newSegments = new Dictionary <uint, TriangleSegment>(); foreach (var segment in Segments) { TriangleSegment newSegment = new TriangleSegment { ID = segment.Key, StartIndex = VertexCount }; for (int i = segment.Value.StartIndex; i < segment.Value.EndIndex; i++) { VertexScratch[VertexCount] = Verticies[i]; VertexCount++; } newSegment.EndIndex = VertexCount; newSegments[newSegment.ID] = newSegment; } Datastructures.Swap(ref Segments, ref newSegments); Datastructures.Swap(ref Verticies, ref VertexScratch); Buffer.SetData(Verticies); }
private uint AddSegment(int count) { if (VertexCount >= MaxVertexSpace) { return(0); } TriangleSegment newSegment = new TriangleSegment { ID = MaxSegment, StartIndex = VertexCount, EndIndex = VertexCount + count }; MaxSegment++; VertexCount += count; Segments.Add(newSegment.ID, newSegment); if (Buffer == null) { Buffer = new DynamicVertexBuffer(Device, ThickLineVertex.VertexDeclaration, MaxTriangles * 3, BufferUsage.None); } Buffer.SetData(Verticies); return(newSegment.ID); }