From 5bb54e8b155a8d0d24e3ab9956dc78986d9acd67 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Fri, 7 Jul 2023 21:21:28 +0900 Subject: [PATCH] Fix now unsupported behaviour in ConvexPolygonClipper --- .../Polygons/ConvexPolygonClipperFuzzingTest.cs | 2 +- osu.Framework.Tests/Polygons/ConvexPolygonClippingTest.cs | 4 ++-- osu.Framework/Utils/ConvexPolygonClipper.cs | 8 +++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/osu.Framework.Tests/Polygons/ConvexPolygonClipperFuzzingTest.cs b/osu.Framework.Tests/Polygons/ConvexPolygonClipperFuzzingTest.cs index 7ad323465..6ebe1123f 100644 --- a/osu.Framework.Tests/Polygons/ConvexPolygonClipperFuzzingTest.cs +++ b/osu.Framework.Tests/Polygons/ConvexPolygonClipperFuzzingTest.cs @@ -104,7 +104,7 @@ namespace osu.Framework.Tests.Polygons private static Vector2[] clip(SimpleConvexPolygon poly1, SimpleConvexPolygon poly2) { - var clipper = new ConvexPolygonClipper(ref poly1, ref poly2); + var clipper = new ConvexPolygonClipper(poly1, poly2); Span buffer = stackalloc Vector2[clipper.GetClipBufferSize()]; diff --git a/osu.Framework.Tests/Polygons/ConvexPolygonClippingTest.cs b/osu.Framework.Tests/Polygons/ConvexPolygonClippingTest.cs index 24aefff5e..d8955b601 100644 --- a/osu.Framework.Tests/Polygons/ConvexPolygonClippingTest.cs +++ b/osu.Framework.Tests/Polygons/ConvexPolygonClippingTest.cs @@ -300,12 +300,12 @@ namespace osu.Framework.Tests.Polygons } private Span clip(SimpleConvexPolygon clipPolygon, SimpleConvexPolygon subjectPolygon) - => new ConvexPolygonClipper(ref clipPolygon, ref subjectPolygon).Clip(); + => new ConvexPolygonClipper(clipPolygon, subjectPolygon).Clip(); private Span clip(TClip clipPolygon, TSubject subjectPolygon) where TClip : IConvexPolygon where TSubject : IConvexPolygon - => new ConvexPolygonClipper(ref clipPolygon, ref subjectPolygon).Clip(); + => new ConvexPolygonClipper(clipPolygon, subjectPolygon).Clip(); private void assertPolygonEquals(IPolygon expected, IPolygon actual, bool reverse) => Assert.That(Vector2Extensions.GetOrientation(actual.GetVertices()), diff --git a/osu.Framework/Utils/ConvexPolygonClipper.cs b/osu.Framework/Utils/ConvexPolygonClipper.cs index a0de4e79e..f347a6160 100644 --- a/osu.Framework/Utils/ConvexPolygonClipper.cs +++ b/osu.Framework/Utils/ConvexPolygonClipper.cs @@ -22,6 +22,12 @@ namespace osu.Framework.Utils this.subjectPolygon = subjectPolygon; } + public ConvexPolygonClipper(TClip clipPolygon, TSubject subjectPolygon) + { + this.clipPolygon = clipPolygon; + this.subjectPolygon = subjectPolygon; + } + /// /// Determines the minimum buffer size required to clip the two polygons. /// @@ -46,7 +52,7 @@ namespace osu.Framework.Utils /// /// The buffer to contain the clipped vertices. Must have a length of . /// A clockwise-ordered set of vertices representing the result of clipping by . - public Span Clip(in Span buffer) + public Span Clip(Span buffer) { if (buffer.Length < GetClipBufferSize()) {