From 3fa6c2960437d993d1770a6adbb4e6103b8c2df5 Mon Sep 17 00:00:00 2001 From: Florin Malita Date: Thu, 26 Oct 2017 20:42:45 +0000 Subject: 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 > Commit-Queue: Florin Malita 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 Commit-Queue: Florin Malita --- src/shaders/gradients/SkGradientShader.cpp | 22 +++++++++++----------- src/shaders/gradients/SkGradientShaderPriv.h | 5 ----- 2 files changed, 11 insertions(+), 16 deletions(-) (limited to 'src/shaders') 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(", "); } diff --git a/src/shaders/gradients/SkGradientShaderPriv.h b/src/shaders/gradients/SkGradientShaderPriv.h index 983c3ef124..9aad102491 100644 --- a/src/shaders/gradients/SkGradientShaderPriv.h +++ b/src/shaders/gradients/SkGradientShaderPriv.h @@ -125,11 +125,6 @@ private: }; SkColor fStorage[(kStorageSize + 3) >> 2]; public: - SkScalar getPos(int i) const { - SkASSERT(i < fColorCount); - return fOrigPos ? fOrigPos[i] : SkIntToScalar(i) / (fColorCount - 1); - } - SkColor* fOrigColors; // original colors, before modulation by paint in context. SkColor4f* fOrigColors4f; // original colors, as linear floats SkScalar* fOrigPos; // original positions -- cgit v1.2.3