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
This commit is contained in:
parent
e565450d0b
commit
53574b7236
@ -76,6 +76,13 @@ private:
|
||||
const Sk4f fTintColor;
|
||||
};
|
||||
|
||||
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:
|
||||
@ -83,10 +90,7 @@ public:
|
||||
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;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user