Fix GrPathUtils::convertLineToCubic
Change-Id: Ie096c9f0629102c5c6b2ca9ddfb8e5e2c31218f7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/333145
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/geometry/GrPathUtils.h b/src/gpu/geometry/GrPathUtils.h
index b861f04..9edaa76 100644
--- a/src/gpu/geometry/GrPathUtils.h
+++ b/src/gpu/geometry/GrPathUtils.h
@@ -131,7 +131,7 @@
using grvx::float2, skvx::bit_pun;
float2 p0 = bit_pun<float2>(startPt);
float2 p1 = bit_pun<float2>(endPt);
- float2 v = (p0 - p1) * (1/3.f);
+ float2 v = (p1 - p0) * (1/3.f);
out[0] = bit_pun<SkPoint>(p0);
out[1] = bit_pun<SkPoint>(p0 + v);
out[2] = bit_pun<SkPoint>(p1 - v);
diff --git a/tests/GrPathUtilsTest.cpp b/tests/GrPathUtilsTest.cpp
index db2872a..9170e00 100644
--- a/tests/GrPathUtilsTest.cpp
+++ b/tests/GrPathUtilsTest.cpp
@@ -69,3 +69,23 @@
float T[2];
REPORTER_ASSERT(r, GrPathUtils::findCubicConvex180Chops(quad, T) == 0);
}
+
+DEF_TEST(GrPathUtils_convertToCubic, r) {
+ SkPoint cubic[4];
+ GrPathUtils::convertLineToCubic({0,0}, {3,6}, cubic);
+ REPORTER_ASSERT(r, cubic[0] == SkPoint::Make(0,0));
+ REPORTER_ASSERT(r, SkScalarNearlyEqual(cubic[1].fX, 1));
+ REPORTER_ASSERT(r, SkScalarNearlyEqual(cubic[1].fY, 2));
+ REPORTER_ASSERT(r, SkScalarNearlyEqual(cubic[2].fX, 2));
+ REPORTER_ASSERT(r, SkScalarNearlyEqual(cubic[2].fY, 4));
+ REPORTER_ASSERT(r, cubic[3] == SkPoint::Make(3,6));
+
+ SkPoint quad[3] = {{0,0}, {3,3}, {6,0}};
+ GrPathUtils::convertQuadToCubic(quad, cubic);
+ REPORTER_ASSERT(r, cubic[0] == SkPoint::Make(0,0));
+ REPORTER_ASSERT(r, SkScalarNearlyEqual(cubic[1].fX, 2));
+ REPORTER_ASSERT(r, SkScalarNearlyEqual(cubic[1].fY, 2));
+ REPORTER_ASSERT(r, SkScalarNearlyEqual(cubic[2].fX, 4));
+ REPORTER_ASSERT(r, SkScalarNearlyEqual(cubic[2].fY, 2));
+ REPORTER_ASSERT(r, cubic[3] == SkPoint::Make(6,0));
+}