aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/beziereffects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gm/beziereffects.cpp')
-rw-r--r--gm/beziereffects.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/gm/beziereffects.cpp b/gm/beziereffects.cpp
index 54c28a7e5f..9167410e9f 100644
--- a/gm/beziereffects.cpp
+++ b/gm/beziereffects.cpp
@@ -156,15 +156,16 @@ protected:
};
SkPoint chopped[10];
SkScalar klmEqs[9];
- SkScalar klmSigns[3];
+ int loopIndex;
int cnt = GrPathUtils::chopCubicAtLoopIntersection(controlPts,
chopped,
klmEqs,
- klmSigns);
+ &loopIndex);
SkPaint ctrlPtPaint;
ctrlPtPaint.setColor(rand.nextU() | 0xFF000000);
- for (int i = 0; i < 4; ++i) {
+ canvas->drawCircle(controlPts[0].fX, controlPts[0].fY, 8.f, ctrlPtPaint);
+ for (int i = 1; i < 4; ++i) {
canvas->drawCircle(controlPts[i].fX, controlPts[i].fY, 6.f, ctrlPtPaint);
}
@@ -196,8 +197,13 @@ protected:
GrPaint grPaint;
grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc));
+ SkScalar sign = 1.0f;
+ if (c == loopIndex && cnt != 3) {
+ sign = -1.0f;
+ }
+
std::unique_ptr<GrMeshDrawOp> op =
- BezierCubicOrConicTestOp::Make(gp, bounds, color, klmEqs, klmSigns[c]);
+ BezierCubicOrConicTestOp::Make(gp, bounds, color, klmEqs, sign);
renderTargetContext->priv().testingOnly_addMeshDrawOp(
std::move(grPaint), GrAAType::kNone, std::move(op));