From 8199d94c0812a05320064f5f864b4208ffb25dba Mon Sep 17 00:00:00 2001 From: Greg Daniel Date: Tue, 14 Mar 2017 10:20:24 -0400 Subject: Generaly Fixes to gpu bezier code BUG=skia: Change-Id: I2246aa0b2bc3327df42ca30d35020a4b878a819b Reviewed-on: https://skia-review.googlesource.com/9555 Commit-Queue: Greg Daniel Reviewed-by: Chris Dalton --- gm/beziereffects.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'gm/beziereffects.cpp') 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 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)); -- cgit v1.2.3