瀏覽代碼

Faster Path2D drawing with polyline

Changes the Path2D drawing to use POLYLINE instead of thick lines.
lawnjelly 3 年之前
父節點
當前提交
6db29583f2
共有 2 個文件被更改,包括 9 次插入6 次删除
  1. 8 6
      scene/2d/path_2d.cpp
  2. 1 0
      scene/2d/path_2d.h

+ 8 - 6
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);
 	}
 }
 

+ 1 - 0
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();