aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders
diff options
context:
space:
mode:
authorGravatar Yuqian Li <liyuqian@google.com>2017-12-27 11:31:46 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-27 18:26:35 +0000
commit7a4d067d885d406a0210551f0dcb478f5899dfe0 (patch)
tree995d8c1890e5486d068e3a733dea4b2291e99921 /src/shaders
parent047ae274319c7f4055b6c7a5c1ca53147fe4712a (diff)
Fix conical test where r1 = r2 = 0
Bug: skia:7436 Change-Id: I0fdbd458d4e2da53e587be27ac90fbb2d32584e5 Reviewed-on: https://skia-review.googlesource.com/89520 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Yuqian Li <liyuqian@google.com>
Diffstat (limited to 'src/shaders')
-rw-r--r--src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp
index 1508c51419..975f7bb381 100644
--- a/src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp
+++ b/src/shaders/gradients/SkTwoPointConicalGradient_gpu.cpp
@@ -172,10 +172,23 @@ std::unique_ptr<GrFragmentProcessor> TwoPointConicalEffect::TestCreate(
int type = mask & kTestTypeMask;
if (type == TwoPointConicalEffect::kRadial_Type) {
center2 = center1;
+ // Make sure that the radii are different
+ if (SkScalarNearlyZero(radius1 - radius2)) {
+ radius2 += .1f;
+ }
} else if (type == TwoPointConicalEffect::kStrip_Type) {
radius1 = SkTMax(radius1, .1f); // Make sure that the radius is non-zero
radius2 = radius1;
+ // Make sure that the centers are different
+ if (SkScalarNearlyZero(SkPoint::Distance(center1, center2))) {
+ center2.fX += .1f;
+ }
} else { // kFocal_Type
+ // Make sure that the centers are different
+ if (SkScalarNearlyZero(SkPoint::Distance(center1, center2))) {
+ center2.fX += .1f;
+ }
+
if (kTestNativelyFocalBit & mask) {
radius1 = 0;
}
@@ -186,12 +199,18 @@ std::unique_ptr<GrFragmentProcessor> TwoPointConicalEffect::TestCreate(
std::swap(radius1, radius2);
radius2 = 0;
}
+
+ // Make sure that the radii are different
+ if (SkScalarNearlyZero(radius1 - radius2)) {
+ radius2 += .1f;
+ }
}
if (SkScalarNearlyZero(radius1 - radius2) &&
SkScalarNearlyZero(SkPoint::Distance(center1, center2))) {
radius2 += .1f; // make sure that we're not degenerated
}
+
RandomGradientParams params(d->fRandom);
auto shader = params.fUseColors4f ?
SkGradientShader::MakeTwoPointConical(center1, radius1, center2, radius2,