From 6db29583f2a970cfd8b8409e2f7ff3764a9aa1fd Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Wed, 1 Dec 2021 15:23:27 +0000 Subject: [PATCH] Faster Path2D drawing with polyline Changes the Path2D drawing to use POLYLINE instead of thick lines. --- scene/2d/path_2d.cpp | 14 ++++++++------ 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 ed30e871d73..40211f2a9b6 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 3b12f025fcd..7e8478283ff 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 curve; + Vector _cached_draw_pts; void _curve_changed();