aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2016-07-20 05:23:31 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-07-20 05:23:31 -0700
commit53574b72362a5b85f75c359966a1ca2066bad2a6 (patch)
treea7de245ab895648fa89124dfa67a1c1fcb347228
parente565450d0ba81a9869be79664126fd8517dc1632 (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.h35
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;
};