diff options
author | senorblanco <senorblanco@chromium.org> | 2015-08-05 13:18:03 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-05 13:18:03 -0700 |
commit | 29e0d3f267a03546f236023347cdb4595ece2fd1 (patch) | |
tree | b898c54e81f166d482cd3e52e09a0663beed7d27 /src/gpu/GrTestUtils.cpp | |
parent | 94df02344bd819a6aff0e9fdd31c2e9ba9bab34d (diff) |
Implement caching of stroked paths in the tessellated path renderer.
This requires adding the stroke info to the cache key, and doing the
stroking and dashing before rendering as triangles.
BUG=skia:3755
Review URL: https://codereview.chromium.org/1275553002
Diffstat (limited to 'src/gpu/GrTestUtils.cpp')
-rw-r--r-- | src/gpu/GrTestUtils.cpp | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/src/gpu/GrTestUtils.cpp b/src/gpu/GrTestUtils.cpp index b690d7e3cd..9e1dbce691 100644 --- a/src/gpu/GrTestUtils.cpp +++ b/src/gpu/GrTestUtils.cpp @@ -5,8 +5,10 @@ * found in the LICENSE file. */ +#include "GrStrokeInfo.h" #include "GrTestUtils.h" #include "SkMatrix.h" +#include "SkPathEffect.h" #include "SkPath.h" #include "SkRRect.h" @@ -216,21 +218,44 @@ const SkPath& TestPathConvex(SkRandom* random) { return gPath[random->nextULessThan(static_cast<uint32_t>(SK_ARRAY_COUNT(gPath)))]; } -SkStrokeRec TestStrokeRec(SkRandom* random) { - SkStrokeRec::InitStyle style = - SkStrokeRec::InitStyle(random->nextULessThan(SkStrokeRec::kFill_InitStyle + 1)); - SkStrokeRec rec(style); +static void randomize_stroke_rec(SkStrokeRec* rec, SkRandom* random) { bool strokeAndFill = random->nextBool(); SkScalar strokeWidth = random->nextBool() ? 0.f : 1.f; - rec.setStrokeStyle(strokeWidth, strokeAndFill); + rec->setStrokeStyle(strokeWidth, strokeAndFill); SkPaint::Cap cap = SkPaint::Cap(random->nextULessThan(SkPaint::kCapCount)); SkPaint::Join join = SkPaint::Join(random->nextULessThan(SkPaint::kJoinCount)); SkScalar miterLimit = random->nextRangeScalar(1.f, 5.f); - rec.setStrokeParams(cap, join, miterLimit); + rec->setStrokeParams(cap, join, miterLimit); +} + +SkStrokeRec TestStrokeRec(SkRandom* random) { + SkStrokeRec::InitStyle style = + SkStrokeRec::InitStyle(random->nextULessThan(SkStrokeRec::kFill_InitStyle + 1)); + SkStrokeRec rec(style); + randomize_stroke_rec(&rec, random); return rec; } +GrStrokeInfo TestStrokeInfo(SkRandom* random) { + SkStrokeRec::InitStyle style = + SkStrokeRec::InitStyle(random->nextULessThan(SkStrokeRec::kFill_InitStyle + 1)); + GrStrokeInfo strokeInfo(style); + randomize_stroke_rec(&strokeInfo, random); + SkPathEffect::DashInfo dashInfo; + dashInfo.fCount = random->nextRangeU(1, 100); + dashInfo.fIntervals = SkNEW_ARRAY(SkScalar, dashInfo.fCount); + SkScalar sum = 0; + for (int i = 0; i < dashInfo.fCount; i++) { + dashInfo.fIntervals[i] = random->nextRangeScalar(SkDoubleToScalar(0.01), + SkDoubleToScalar(10.0)); + sum += dashInfo.fIntervals[i]; + } + dashInfo.fPhase = random->nextRangeScalar(0, sum); + strokeInfo.setDashInfo(dashInfo); + return strokeInfo; +} + }; #endif |