createIndex method
Creates an optimized version of vertexPoints where the points are deduplicated via an index buffer.
Implementation
IndexedVertices createIndex() {
final Map<Point, int> pointMap = <Point, int>{};
int index = 0;
final List<int> indices = <int>[];
for (final Point point in vertexPoints) {
indices.add(pointMap.putIfAbsent(point, () => index++));
}
Float32List pointsToFloat32List(List<Point> points) {
final Float32List vertices = Float32List(points.length * 2);
int vertexIndex = 0;
for (final Point point in points) {
vertices[vertexIndex++] = point.x;
vertices[vertexIndex++] = point.y;
}
return vertices;
}
final List<Point> compressedPoints = pointMap.keys.toList();
if (compressedPoints.length * 2 + indices.length >
vertexPoints.length * 2) {
return IndexedVertices(pointsToFloat32List(vertexPoints), null);
}
return IndexedVertices(
pointsToFloat32List(compressedPoints),
Uint16List.fromList(indices),
);
}