diff options
author | 2016-07-20 05:23:31 -0700 | |
---|---|---|
committer | 2016-07-20 05:23:31 -0700 | |
commit | 53574b72362a5b85f75c359966a1ca2066bad2a6 (patch) | |
tree | a7de245ab895648fa89124dfa67a1c1fcb347228 | |
parent | e565450d0ba81a9869be79664126fd8517dc1632 (diff) |
Fix color order for 565,4444, and I8 samplers.
10 GMs fixed on Linux/Win!
Also, don't unpremul I8 colors. It's inconsistent with the other formats.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2166623002
Review-Url: https://codereview.chromium.org/2166623002
-rw-r--r-- | src/core/SkLinearBitmapPipeline_sample.h | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/src/core/SkLinearBitmapPipeline_sample.h b/src/core/SkLinearBitmapPipeline_sample.h index e957ae7e4d..86ad6e146f 100644 --- a/src/core/SkLinearBitmapPipeline_sample.h +++ b/src/core/SkLinearBitmapPipeline_sample.h @@ -77,16 +77,20 @@ private: }; template <SkGammaType gammaType> +static inline Sk4f pmcolor_to_rgba(SkPMColor pixel) { + return swizzle_rb_if_bgra( + (gammaType == kSRGB_SkGammaType) ? Sk4f_fromS32(pixel) + : Sk4f_fromL32(pixel)); +} + +template <SkGammaType gammaType> class PixelConverter<kRGB_565_SkColorType, gammaType> { public: using Element = uint16_t; PixelConverter(const SkPixmap& srcPixmap) { } Sk4f toSk4f(Element pixel) const { - SkPMColor pixel32 = SkPixel16ToPixel32(pixel); - return gammaType == kSRGB_SkGammaType - ? Sk4f_fromS32(pixel32) - : Sk4f_fromL32(pixel32); + return pmcolor_to_rgba<gammaType>(SkPixel16ToPixel32(pixel)); } }; @@ -97,10 +101,7 @@ public: PixelConverter(const SkPixmap& srcPixmap) { } Sk4f toSk4f(Element pixel) const { - SkPMColor pixel32 = SkPixel4444ToPixel32(pixel); - return gammaType == kSRGB_SkGammaType - ? Sk4f_fromS32(pixel32) - : Sk4f_fromL32(pixel32); + return pmcolor_to_rgba<gammaType>(SkPixel4444ToPixel32(pixel)); } }; @@ -139,7 +140,7 @@ public: fColorTable = (Sk4f*)SkAlign16((intptr_t)fColorTableStorage.get()); for (int i = 0; i < skColorTable->count(); i++) { - fColorTable[i] = this->convertPixel((*skColorTable)[i]); + fColorTable[i] = pmcolor_to_rgba<gammaType>((*skColorTable)[i]); } } @@ -157,21 +158,7 @@ public: private: static const size_t kColorTableSize = sizeof(Sk4f[256]) + 12; - Sk4f convertPixel(SkPMColor pmColor) { - Sk4f pixel = to_4f(pmColor); - float alpha = get_alpha(pixel); - if (alpha != 0.0f) { - float invAlpha = 1.0f / alpha; - Sk4f normalize = {invAlpha, invAlpha, invAlpha, 1.0f / 255.0f}; - pixel = pixel * normalize; - if (gammaType == kSRGB_SkGammaType) { - pixel = linear_to_srgb(pixel); - } - return pixel; - } else { - return Sk4f{0.0f}; - } - } + SkAutoMalloc fColorTableStorage{kColorTableSize}; Sk4f* fColorTable; }; |