diff options
author | Brian Osman <brianosman@google.com> | 2016-10-17 12:48:13 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-10-18 13:01:28 +0000 |
commit | a2196536782903d22011ed7145b8640c66fc72ff (patch) | |
tree | 065f25088074f908a3531acce43d1c3a26367863 /src | |
parent | 8bf4e672f2c40ef313274f8b79c2c9304f9fff3f (diff) |
Include 4f variants of random gradients during testing
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3538
Change-Id: Ieee6e49cb830b6aab87b0ecd7865c65ffb90dfe8
Reviewed-on: https://skia-review.googlesource.com/3538
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/effects/gradients/SkGradientShader.cpp | 19 | ||||
-rw-r--r-- | src/effects/gradients/SkGradientShaderPriv.h | 12 | ||||
-rw-r--r-- | src/effects/gradients/SkLinearGradient.cpp | 7 | ||||
-rw-r--r-- | src/effects/gradients/SkRadialGradient.cpp | 7 | ||||
-rw-r--r-- | src/effects/gradients/SkSweepGradient.cpp | 7 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp | 50 |
6 files changed, 76 insertions, 26 deletions
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp index eee2cbfadc..03f03b20b1 100644 --- a/src/effects/gradients/SkGradientShader.cpp +++ b/src/effects/gradients/SkGradientShader.cpp @@ -6,6 +6,7 @@ */ #include "Sk4fLinearGradient.h" +#include "SkColorSpace_Base.h" #include "SkGradientShaderPriv.h" #include "SkHalf.h" #include "SkLinearGradient.h" @@ -1733,6 +1734,7 @@ void GrGradientEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const GrGradientEffect::RandomGradientParams::RandomGradientParams(SkRandom* random) { fColorCount = random->nextRangeU(1, kMaxRandomGradientColors); + fUseColors4f = random->nextBool(); // if one color, omit stops, otherwise randomly decide whether or not to if (fColorCount == 1 || (fColorCount >= 2 && random->nextBool())) { @@ -1741,9 +1743,24 @@ GrGradientEffect::RandomGradientParams::RandomGradientParams(SkRandom* random) { fStops = fStopStorage; } + // if using SkColor4f, attach a random (possibly null) color space (with linear gamma) + if (fUseColors4f) { + fColorSpace = GrTest::TestColorSpace(random); + if (fColorSpace) { + fColorSpace = as_CSB(fColorSpace)->makeLinearGamma(); + } + } + SkScalar stop = 0.f; for (int i = 0; i < fColorCount; ++i) { - fColors[i] = random->nextU(); + if (fUseColors4f) { + fColors4f[i].fR = random->nextUScalar1(); + fColors4f[i].fG = random->nextUScalar1(); + fColors4f[i].fB = random->nextUScalar1(); + fColors4f[i].fA = random->nextUScalar1(); + } else { + fColors[i] = random->nextU(); + } if (fStops) { fStops[i] = stop; stop = i < fColorCount - 1 ? stop + random->nextUScalar1() * (1.f - stop) : 1.f; diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h index 36ccab04e1..cbffea1f2f 100644 --- a/src/effects/gradients/SkGradientShaderPriv.h +++ b/src/effects/gradients/SkGradientShaderPriv.h @@ -401,16 +401,20 @@ public: protected: /** Helper struct that stores (and populates) parameters to construct a random gradient. - The constructor decides whether stop values should be used or not (fStops may be nullptr - after construction). fColorCount will be the number of color stops, and fColors and fStops - can be passed to the gradient factory. - */ + If fUseColors4f is true, then the SkColor4f factory should be called, with fColors4f and + fColorSpace. Otherwise, the SkColor factory should be called, with fColors. fColorCount + will be the number of color stops in either case, and fColors and fStops can be passed to + the gradient factory. (The constructor may decide not to use stops, in which case fStops + will be nullptr). */ struct RandomGradientParams { static const int kMaxRandomGradientColors = 4; RandomGradientParams(SkRandom* r); + bool fUseColors4f; SkColor fColors[kMaxRandomGradientColors]; + SkColor4f fColors4f[kMaxRandomGradientColors]; + sk_sp<SkColorSpace> fColorSpace; SkScalar fStopStorage[kMaxRandomGradientColors]; SkShader::TileMode fTileMode; int fColorCount; diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp index 2fcaae1ca9..a34515cfef 100644 --- a/src/effects/gradients/SkLinearGradient.cpp +++ b/src/effects/gradients/SkLinearGradient.cpp @@ -415,8 +415,11 @@ sk_sp<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d) {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}}; RandomGradientParams params(d->fRandom); - auto shader = SkGradientShader::MakeLinear(points, params.fColors, params.fStops, - params.fColorCount, params.fTileMode); + auto shader = params.fUseColors4f ? + SkGradientShader::MakeLinear(points, params.fColors4f, params.fColorSpace, params.fStops, + params.fColorCount, params.fTileMode) : + SkGradientShader::MakeLinear(points, params.fColors, params.fStops, + params.fColorCount, params.fTileMode); SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); auto dstColorSpace = GrTest::TestColorSpace(d->fRandom); sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPArgs( diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp index f13deb1cdb..5cf524537e 100644 --- a/src/effects/gradients/SkRadialGradient.cpp +++ b/src/effects/gradients/SkRadialGradient.cpp @@ -309,8 +309,11 @@ sk_sp<GrFragmentProcessor> GrRadialGradient::TestCreate(GrProcessorTestData* d) SkScalar radius = d->fRandom->nextUScalar1(); RandomGradientParams params(d->fRandom); - auto shader = SkGradientShader::MakeRadial(center, radius, params.fColors, params.fStops, - params.fColorCount, params.fTileMode); + auto shader = params.fUseColors4f ? + SkGradientShader::MakeRadial(center, radius, params.fColors4f, params.fColorSpace, + params.fStops, params.fColorCount, params.fTileMode) : + SkGradientShader::MakeRadial(center, radius, params.fColors, + params.fStops, params.fColorCount, params.fTileMode); SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); auto dstColorSpace = GrTest::TestColorSpace(d->fRandom); sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPArgs( diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index d62e2e55f2..04fc2c7436 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -191,8 +191,11 @@ sk_sp<GrFragmentProcessor> GrSweepGradient::TestCreate(GrProcessorTestData* d) { SkPoint center = {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}; RandomGradientParams params(d->fRandom); - sk_sp<SkShader> shader(SkGradientShader::MakeSweep(center.fX, center.fY, params.fColors, - params.fStops, params.fColorCount)); + auto shader = params.fUseColors4f ? + SkGradientShader::MakeSweep(center.fX, center.fY, params.fColors4f, params.fColorSpace, + params.fStops, params.fColorCount) : + SkGradientShader::MakeSweep(center.fX, center.fY, params.fColors, + params.fStops, params.fColorCount); SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); auto dstColorSpace = GrTest::TestColorSpace(d->fRandom); sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPArgs( diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp index 00d8fac73f..8eb8b638f5 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp @@ -200,9 +200,13 @@ sk_sp<GrFragmentProcessor> Edge2PtConicalEffect::TestCreate(GrProcessorTestData* radius2 = radius1 + diffLen; RandomGradientParams params(d->fRandom); - auto shader = SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, - params.fColors, params.fStops, - params.fColorCount, params.fTileMode); + auto shader = params.fUseColors4f ? + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors4f, params.fColorSpace, params.fStops, + params.fColorCount, params.fTileMode) : + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors, params.fStops, + params.fColorCount, params.fTileMode); SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); auto dstColorSpace = GrTest::TestColorSpace(d->fRandom); sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPArgs( @@ -474,9 +478,13 @@ sk_sp<GrFragmentProcessor> FocalOutside2PtConicalEffect::TestCreate(GrProcessorT radius2 = d->fRandom->nextRangeF(0.f, diffLen); RandomGradientParams params(d->fRandom); - auto shader = SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, - params.fColors, params.fStops, - params.fColorCount, params.fTileMode); + auto shader = params.fUseColors4f ? + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors4f, params.fColorSpace, params.fStops, + params.fColorCount, params.fTileMode) : + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors, params.fStops, + params.fColorCount, params.fTileMode); SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); auto dstColorSpace = GrTest::TestColorSpace(d->fRandom); sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPArgs( @@ -676,9 +684,13 @@ sk_sp<GrFragmentProcessor> FocalInside2PtConicalEffect::TestCreate(GrProcessorTe } while (radius1 == radius2 && center1 == center2); RandomGradientParams params(d->fRandom); - auto shader = SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, - params.fColors, params.fStops, - params.fColorCount, params.fTileMode); + auto shader = params.fUseColors4f ? + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors4f, params.fColorSpace, params.fStops, + params.fColorCount, params.fTileMode) : + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors, params.fStops, + params.fColorCount, params.fTileMode); SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); auto dstColorSpace = GrTest::TestColorSpace(d->fRandom); sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPArgs( @@ -920,9 +932,13 @@ sk_sp<GrFragmentProcessor> CircleInside2PtConicalEffect::TestCreate(GrProcessorT } while (radius1 == radius2 && center1 == center2); RandomGradientParams params(d->fRandom); - auto shader = SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, - params.fColors, params.fStops, - params.fColorCount, params.fTileMode); + auto shader = params.fUseColors4f ? + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors4f, params.fColorSpace, params.fStops, + params.fColorCount, params.fTileMode) : + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors, params.fStops, + params.fColorCount, params.fTileMode); SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); auto dstColorSpace = GrTest::TestColorSpace(d->fRandom); sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPArgs( @@ -1151,9 +1167,13 @@ sk_sp<GrFragmentProcessor> CircleOutside2PtConicalEffect::TestCreate(GrProcessor radius2 = radius1 + d->fRandom->nextRangeF(0.f, diffLen); RandomGradientParams params(d->fRandom); - auto shader = SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, - params.fColors, params.fStops, - params.fColorCount, params.fTileMode); + auto shader = params.fUseColors4f ? + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors4f, params.fColorSpace, params.fStops, + params.fColorCount, params.fTileMode) : + SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2, + params.fColors, params.fStops, + params.fColorCount, params.fTileMode); SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); auto dstColorSpace = GrTest::TestColorSpace(d->fRandom); sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPArgs( |