diff options
author | 2017-02-27 11:00:04 -0800 | |
---|---|---|
committer | 2017-03-06 19:33:25 -0800 | |
commit | efb4b06493fe7b1604c762a448b13c7af2845a8d (patch) | |
tree | 310d40716decb7686065339226534dac0bb35faa /libs/hwui/Texture.cpp | |
parent | 4f357c081260c5bb36498169eb698adf7089899c (diff) |
Add ColorSpace information on Bitmap
This is the first step toward interpreting color spaces at render time.
Bug: 32984164
Test: BitmapColorSpaceTest in CtsGraphicsTestCases
Change-Id: I0164a18f1ed74a745874fe5229168042afe27a04
Diffstat (limited to 'libs/hwui/Texture.cpp')
-rw-r--r-- | libs/hwui/Texture.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/libs/hwui/Texture.cpp b/libs/hwui/Texture.cpp index 0dbd7674e2aa..cfc2744e61b2 100644 --- a/libs/hwui/Texture.cpp +++ b/libs/hwui/Texture.cpp @@ -241,21 +241,23 @@ void Texture::colorTypeToGlFormatAndType(const Caches& caches, SkColorType color } } -SkBitmap Texture::uploadToN32(const SkBitmap& bitmap, bool hasSRGB, sk_sp<SkColorSpace> sRGB) { +SkBitmap Texture::uploadToN32(const SkBitmap& bitmap, bool hasLinearBlending, + sk_sp<SkColorSpace> sRGB) { SkBitmap rgbaBitmap; rgbaBitmap.allocPixels(SkImageInfo::MakeN32(bitmap.width(), bitmap.height(), - bitmap.info().alphaType(), hasSRGB ? sRGB : nullptr)); + bitmap.info().alphaType(), hasLinearBlending ? sRGB : nullptr)); rgbaBitmap.eraseColor(0); SkCanvas canvas(rgbaBitmap); canvas.drawBitmap(bitmap, 0.0f, 0.0f, nullptr); return rgbaBitmap; } -bool Texture::hasUnsupportedColorType(const SkImageInfo& info, bool hasSRGB, SkColorSpace* sRGB) { +bool Texture::hasUnsupportedColorType(const SkImageInfo& info, bool hasLinearBlending, + SkColorSpace* sRGB) { bool needSRGB = info.colorSpace() == sRGB; return info.colorType() == kARGB_4444_SkColorType || info.colorType() == kIndex_8_SkColorType - || (info.colorType() == kRGB_565_SkColorType && hasSRGB && needSRGB); + || (info.colorType() == kRGB_565_SkColorType && hasLinearBlending && needSRGB); } @@ -295,11 +297,11 @@ void Texture::upload(Bitmap& bitmap) { mCaches.textureState().bindTexture(mTarget, mId); // TODO: Handle sRGB gray bitmaps - bool hasSRGB = mCaches.extensions().hasSRGB(); - if (CC_UNLIKELY(hasUnsupportedColorType(bitmap.info(), hasSRGB, sRGB.get()))) { + bool hasLinearBlending = mCaches.extensions().hasLinearBlending(); + if (CC_UNLIKELY(hasUnsupportedColorType(bitmap.info(), hasLinearBlending, sRGB.get()))) { SkBitmap skBitmap; bitmap.getSkBitmap(&skBitmap); - SkBitmap rgbaBitmap = uploadToN32(skBitmap, hasSRGB, std::move(sRGB)); + SkBitmap rgbaBitmap = uploadToN32(skBitmap, hasLinearBlending, std::move(sRGB)); uploadToTexture(needsAlloc, internalFormat, format, type, rgbaBitmap.rowBytesAsPixels(), rgbaBitmap.bytesPerPixel(), rgbaBitmap.width(), rgbaBitmap.height(), rgbaBitmap.getPixels()); |