diff options
author | lawnjelly <lawnjelly@gmail.com> | 2021-12-01 15:23:27 +0000 |
---|---|---|
committer | lawnjelly <lawnjelly@gmail.com> | 2021-12-01 15:23:27 +0000 |
commit | 6db29583f2a970cfd8b8409e2f7ff3764a9aa1fd (patch) | |
tree | 227f71e879adfaf383c0b7ae34adc99cb855b6cb | |
parent | 56f73a7e294972ddabbada46fc75f3f7ef8ca36f (diff) |
Faster Path2D drawing with polyline
Changes the Path2D drawing to use POLYLINE instead of thick lines.
-rw-r--r-- | scene/2d/path_2d.cpp | 14 | ||||
-rw-r--r-- | scene/2d/path_2d.h | 1 |
2 files changed, 9 insertions, 6 deletions
diff --git a/scene/2d/path_2d.cpp b/scene/2d/path_2d.cpp index ed30e871d7..40211f2a9b 100644 --- a/scene/2d/path_2d.cpp +++ b/scene/2d/path_2d.cpp @@ -100,16 +100,18 @@ void Path2D::_notification(int p_what) { #endif const Color color = Color(0.5, 0.6, 1.0, 0.7); - for (int i = 0; i < curve->get_point_count(); i++) { - Vector2 prev_p = curve->get_point_position(i); + _cached_draw_pts.resize(curve->get_point_count() * 8); + int count = 0; - for (int j = 1; j <= 8; j++) { - real_t frac = j / 8.0; + for (int i = 0; i < curve->get_point_count(); i++) { + for (int j = 0; j < 8; j++) { + real_t frac = j * (1.0 / 8.0); Vector2 p = curve->interpolate(i, frac); - draw_line(prev_p, p, color, line_width); - prev_p = p; + _cached_draw_pts.set(count++, p); } } + + draw_polyline(_cached_draw_pts, color, line_width, true); } } diff --git a/scene/2d/path_2d.h b/scene/2d/path_2d.h index 3b12f025fc..7e8478283f 100644 --- a/scene/2d/path_2d.h +++ b/scene/2d/path_2d.h @@ -38,6 +38,7 @@ class Path2D : public Node2D { GDCLASS(Path2D, Node2D); Ref<Curve2D> curve; + Vector<Vector2> _cached_draw_pts; void _curve_changed(); |