Index: src/effects/gradients/SkTwoPointConicalGradient.cpp |
diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp |
index 43d6f1f7c997e87888e407537dfae942eeb972bc..cb3c0af48b1331fcde6e4da2e747d277e86617e5 100644 |
--- a/src/effects/gradients/SkTwoPointConicalGradient.cpp |
+++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp |
@@ -17,7 +17,7 @@ struct TwoPtRadialContext { |
TwoPtRadialContext(const TwoPtRadial& rec, SkScalar fx, SkScalar fy, |
SkScalar dfx, SkScalar dfy); |
- SkFixed nextT(); |
+ float nextT(); |
}; |
static int valid_divide(float numer, float denom, float* ratio) { |
@@ -77,6 +77,8 @@ static float lerp(float x, float dx, float t) { |
static float sqr(float x) { return x * x; } |
+const float TwoPtRadial::kDontDrawT = NAN; |
+ |
void TwoPtRadial::init(const SkPoint& center0, SkScalar rad0, |
const SkPoint& center1, SkScalar rad1, |
bool flipped) { |
@@ -104,7 +106,7 @@ TwoPtRadialContext::TwoPtRadialContext(const TwoPtRadial& rec, SkScalar fx, SkSc |
, fB(-2 * (rec.fDCenterX * fRelX + rec.fDCenterY * fRelY + rec.fRDR)) |
, fDB(-2 * (rec.fDCenterX * fIncX + rec.fDCenterY * fIncY)) {} |
-SkFixed TwoPtRadialContext::nextT() { |
+float TwoPtRadialContext::nextT() { |
float roots[2]; |
float C = sqr(fRelX) + sqr(fRelY) - fRec.fRadius2; |
@@ -129,7 +131,7 @@ SkFixed TwoPtRadialContext::nextT() { |
return TwoPtRadial::kDontDrawT; |
} |
} |
- return SkFloatToFixed(t); |
+ return t; |
} |
typedef void (*TwoPointConicalProc)(TwoPtRadialContext* rec, SkPMColor* dstC, |
@@ -139,11 +141,11 @@ static void twopoint_clamp(TwoPtRadialContext* rec, SkPMColor* SK_RESTRICT dstC, |
const SkPMColor* SK_RESTRICT cache, int toggle, |
int count) { |
for (; count > 0; --count) { |
- SkFixed t = rec->nextT(); |
+ float t = rec->nextT(); |
if (TwoPtRadial::DontDrawT(t)) { |
*dstC++ = 0; |
} else { |
- SkFixed index = SkClampMax(t, 0xFFFF); |
+ const unsigned index = clamp_tileproc(t); |
SkASSERT(index <= 0xFFFF); |
*dstC++ = cache[toggle + |
(index >> SkGradientShaderBase::kCache32Shift)]; |
@@ -156,11 +158,11 @@ static void twopoint_repeat(TwoPtRadialContext* rec, SkPMColor* SK_RESTRICT dstC |
const SkPMColor* SK_RESTRICT cache, int toggle, |
int count) { |
for (; count > 0; --count) { |
- SkFixed t = rec->nextT(); |
+ float t = rec->nextT(); |
if (TwoPtRadial::DontDrawT(t)) { |
*dstC++ = 0; |
} else { |
- SkFixed index = repeat_tileproc(t); |
+ const unsigned index = repeat_tileproc(t); |
SkASSERT(index <= 0xFFFF); |
*dstC++ = cache[toggle + |
(index >> SkGradientShaderBase::kCache32Shift)]; |
@@ -173,11 +175,11 @@ static void twopoint_mirror(TwoPtRadialContext* rec, SkPMColor* SK_RESTRICT dstC |
const SkPMColor* SK_RESTRICT cache, int toggle, |
int count) { |
for (; count > 0; --count) { |
- SkFixed t = rec->nextT(); |
+ float t = rec->nextT(); |
if (TwoPtRadial::DontDrawT(t)) { |
*dstC++ = 0; |
} else { |
- SkFixed index = mirror_tileproc(t); |
+ const unsigned index = mirror_tileproc(t); |
SkASSERT(index <= 0xFFFF); |
*dstC++ = cache[toggle + |
(index >> SkGradientShaderBase::kCache32Shift)]; |