aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders/gradients/SkGradientShader.cpp
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2017-10-26 20:42:45 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-10-26 20:42:58 +0000
commit3fa6c2960437d993d1770a6adbb4e6103b8c2df5 (patch)
treecbc51300274500567484a2a7403e03eb65c8edb4 /src/shaders/gradients/SkGradientShader.cpp
parent8713b88332e25105eda702540eaef7ada731f1fb (diff)
Revert "Stop using fixed point recs for gradient positioning info"
This reverts commit 97293503f50d01d7e5054d7a1f9d93644cce9964. Reason for revert: some wacky diffs Original change's description: > Stop using fixed point recs for gradient positioning info > > The fixed point gradient records are historical relics. Instead of > round-tripping through FP, just use the float positions directly. > > We can remove the recs completely in a follow-up, after rebaselining the > existing clients. > > Change-Id: I85d1e0f469006de320dbc842f50e69bcbb3aa668 > Reviewed-on: https://skia-review.googlesource.com/64102 > Reviewed-by: Brian Osman <brianosman@google.com> > Commit-Queue: Florin Malita <fmalita@chromium.org> TBR=brianosman@google.com,fmalita@chromium.org,reed@google.com Change-Id: I37bf9b6a358eb09d7d0cf737beb9c1bd994fd736 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://skia-review.googlesource.com/64103 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'src/shaders/gradients/SkGradientShader.cpp')
-rw-r--r--src/shaders/gradients/SkGradientShader.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/shaders/gradients/SkGradientShader.cpp b/src/shaders/gradients/SkGradientShader.cpp
index 1975692faa..8e24919c94 100644
--- a/src/shaders/gradients/SkGradientShader.cpp
+++ b/src/shaders/gradients/SkGradientShader.cpp
@@ -498,15 +498,11 @@ bool SkGradientShaderBase::onAsLuminanceColor(SkColor* lum) const {
return true;
}
-#ifdef SK_SUPPORT_LEGACY_FIXED_GRADIENT_POS
static inline int SkFixedToFFFF(SkFixed x) {
SkASSERT((unsigned)x <= SK_Fixed1);
return x - (x >> 16);
}
-static constexpr unsigned kCacheShift = 8;
-#endif
-
static constexpr int kGradientTextureSize = 256;
void SkGradientShaderBase::initLinearBitmap(SkBitmap* bitmap, GradientBitmapType bitmapType) const {
@@ -544,14 +540,13 @@ void SkGradientShaderBase::initLinearBitmap(SkBitmap* bitmap, GradientBitmapType
// our own CS for identity/no transform.
auto* cs = bitmapType != GradientBitmapType::kLegacy ? fColorSpace.get() : nullptr;
+ // TODO: refactor to avoid using fRecs.
+ static constexpr unsigned kCacheShift = 8;
+
int prevIndex = 0;
for (int i = 1; i < fColorCount; i++) {
-#ifdef SK_SUPPORT_LEGACY_FIXED_GRADIENT_POS
int nextIndex = (fColorCount == 2) ? (kGradientTextureSize - 1)
: SkFixedToFFFF(fRecs[i].fPos) >> kCacheShift;
-#else
- int nextIndex = SkScalarRoundToInt(this->getPos(i) * (kGradientTextureSize - 1));
-#endif
SkASSERT(nextIndex < kGradientTextureSize);
if (nextIndex > prevIndex) {
@@ -659,8 +654,13 @@ void SkGradientShaderBase::commonAsAGradient(GradientInfo* info) const {
memcpy(info->fColors, fOrigColors, fColorCount * sizeof(SkColor));
}
if (info->fColorOffsets) {
- for (int i = 0; i < fColorCount; ++i) {
- info->fColorOffsets[i] = this->getPos(i);
+ if (fColorCount == 2) {
+ info->fColorOffsets[0] = 0;
+ info->fColorOffsets[1] = SK_Scalar1;
+ } else if (fColorCount > 2) {
+ for (int i = 0; i < fColorCount; ++i) {
+ info->fColorOffsets[i] = SkFixedToScalar(fRecs[i].fPos);
+ }
}
}
}
@@ -685,7 +685,7 @@ void SkGradientShaderBase::toString(SkString* str) const {
if (fColorCount > 2) {
str->append(" points: (");
for (int i = 0; i < fColorCount; ++i) {
- str->appendScalar(this->getPos(i));
+ str->appendScalar(SkFixedToScalar(fRecs[i].fPos));
if (i < fColorCount-1) {
str->append(", ");
}