From 743ba3780968ac8c24fb0be34f519bbf0dccd9ba Mon Sep 17 00:00:00 2001 From: DCFApixels <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:29:42 +0800 Subject: [PATCH] fix --- Runtime/Gizmos/DebugX.base.cs | 2 +- Runtime/Gizmos/DebugX.lines.cs | 67 ++++++++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 13 deletions(-) diff --git a/Runtime/Gizmos/DebugX.base.cs b/Runtime/Gizmos/DebugX.base.cs index cedf8dc..f7b2a4e 100644 --- a/Runtime/Gizmos/DebugX.base.cs +++ b/Runtime/Gizmos/DebugX.base.cs @@ -499,7 +499,7 @@ namespace DCFApixels _drawDatas = PinnedArray.Pin(DummyArray.Get()); _enableInstancing = IsSupportsComputeShaders && _material.GetMaterial().enableInstancing; } - public virtual int ExecuteOrder => _material.GetExecuteOrder(); + public virtual int ExecuteOrder => _material.GetExecuteOrder() - 1; public virtual bool IsStaticRender => true; public void Prepare(GizmosList rawList) { diff --git a/Runtime/Gizmos/DebugX.lines.cs b/Runtime/Gizmos/DebugX.lines.cs index 6c8688a..69a05b2 100644 --- a/Runtime/Gizmos/DebugX.lines.cs +++ b/Runtime/Gizmos/DebugX.lines.cs @@ -13,35 +13,78 @@ namespace DCFApixels public readonly partial struct DrawHandler { #region Lines - public DrawHandler Lines(ReadOnlySpan lines) + [IN(LINE)] public DrawHandler Lines(Vector3[] points) => Lines(new ReadOnlySpan(points)); + [IN(LINE)] public DrawHandler Lines(Vector3[] points, int length) => Lines(new ReadOnlySpan(points, 0, length)); + [IN(LINE)] public DrawHandler Lines(Vector3[] points, int startIndex, int length) => Lines(new ReadOnlySpan(points, startIndex, length)); + [IN(LINE)] + public DrawHandler Lines(ReadOnlySpan points) { - for (int i = 0, iMax = lines.Length & ~1; i < iMax;) + for (int i = 0, iMax = points.Length & ~1; i < iMax;) { - Line(lines[i++], lines[i++]); + Line(points[i++], points[i++]); } return this; } - public DrawHandler LinesStrip(ReadOnlySpan lines) + [IN(LINE)] public DrawHandler Lines(List points) => Lines(points, 0, points.Count); + [IN(LINE)] public DrawHandler Lines(List points, int length) => Lines(points, 0, length); + [IN(LINE)] + public DrawHandler Lines(List points, int startIndex, int length) { - for (int i = 0, iMax = lines.Length; i < iMax;) + for (int i = startIndex, iMax = startIndex + (length & ~1); i < iMax;) { - Line(lines[i], lines[i++]); + Line(points[i++], points[i++]); } return this; } - public DrawHandler Lines(List lines) + public DrawHandler Lines(IEnumerable points) { - for (int i = 0, iMax = lines.Count & ~1; i < iMax;) + var enumerator = points.GetEnumerator(); + while (true) { - Line(lines[i++], lines[i++]); + if (enumerator.MoveNext() == false) { break; } + Vector3 startPoint = enumerator.Current; + if (enumerator.MoveNext() == false) { break; } + Vector3 endPoint = enumerator.Current; + Line(startPoint, endPoint); } return this; } - public DrawHandler LinesStrip(List lines) + #endregion + + #region LineStrip + [IN(LINE)] public DrawHandler LineStrip(Vector3[] points) => LineStrip(new ReadOnlySpan(points)); + [IN(LINE)] public DrawHandler LineStrip(Vector3[] points, int length) => LineStrip(new ReadOnlySpan(points, 0, length)); + [IN(LINE)] public DrawHandler LineStrip(Vector3[] points, int startIndex, int length) => LineStrip(new ReadOnlySpan(points, startIndex, length)); + [IN(LINE)] + public DrawHandler LineStrip(ReadOnlySpan points) { - for (int i = 0, iMax = lines.Count; i < iMax;) + for (int i = 0, iMax = points.Length - 1; i < iMax;) { - Line(lines[i], lines[i++]); + Line(points[i], points[++i]); + } + return this; + } + [IN(LINE)] public DrawHandler LineStrip(List points) => LineStrip(points, 0, points.Count); + [IN(LINE)] public DrawHandler LineStrip(List points, int length) => LineStrip(points, 0, length); + [IN(LINE)] + public DrawHandler LineStrip(List points, int startIndex, int length) + { + for (int i = startIndex, iMax = startIndex + length; i < iMax;) + { + Line(points[i], points[++i]); + } + return this; + } + public DrawHandler LineStrip(IEnumerable points) + { + var enumerator = points.GetEnumerator(); + enumerator.MoveNext(); + Vector3 startPoint = enumerator.Current; + while (enumerator.MoveNext()) + { + Vector3 endPoint = enumerator.Current; + Line(startPoint, endPoint); + startPoint = endPoint; } return this; }