diff options
author | 2017-01-20 13:21:56 -0500 | |
---|---|---|
committer | 2017-01-20 19:02:08 +0000 | |
commit | aaedae7acb609ac9c914ca435ed845f0139916c0 (patch) | |
tree | 0aa612597b4f80445575c739b50db74e3c6d4bdd /gm | |
parent | 3329cceab5feca230df1caee16be045249228dc1 (diff) |
Force Index8 to N32 in deferred texture path.
Ganesh doesn't support Index8, because GPUs don't really
support it. So serializing it in the deferred blob just
meant doing an expansion before upload. This forces that
to happen when we build the blob. It also paves the way
for removing the last usage of MakeTextureFromPixmap,
which I'd like to remove.
BUG=skia:
Change-Id: I7c0292098d71e2f8ec1f9910e1234761822ce957
Reviewed-on: https://skia-review.googlesource.com/7340
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'gm')
-rw-r--r-- | gm/deferredtextureimage.cpp | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/gm/deferredtextureimage.cpp b/gm/deferredtextureimage.cpp index 1043c1b6d6..ed1717d5cd 100644 --- a/gm/deferredtextureimage.cpp +++ b/gm/deferredtextureimage.cpp @@ -85,7 +85,7 @@ static void DrawDeferredTextureImageMipMapTree(SkCanvas* canvas, SkImage* image, SkPaint paint; paint.setFilterQuality(params->fQuality); - int mipLevelCount = SkMipMap::ComputeLevelCount(512, 512); + int mipLevelCount = SkMipMap::ComputeLevelCount(image->width(), image->height()); size_t requiredMemoryInBytes = image->getDeferredTextureImageData( *proxy, params, 1, nullptr, canvas->imageInfo().colorSpace()); if (requiredMemoryInBytes == 0) { @@ -107,13 +107,14 @@ static void DrawDeferredTextureImageMipMapTree(SkCanvas* canvas, SkImage* image, canvas->translate(10.f, offsetHeight); canvas->drawImage(uploadedImage, 0, 0, &paint); canvas->restore(); - offsetHeight += 512 + 10; + offsetHeight += image->height() + 10; // handle generated mipmap levels for (int i = 0; i < mipLevelCount; i++) { - SkISize mipSize = SkMipMap::ComputeLevelSize(512, 512, i); + SkISize mipSize = SkMipMap::ComputeLevelSize(image->width(), image->height(), i); canvas->save(); canvas->translate(10.f, offsetHeight); - canvas->scale(mipSize.width() / 512.f, mipSize.height() / 512.f); + canvas->scale(mipSize.width() / static_cast<float>(image->width()), + mipSize.height() / static_cast<float>(image->height())); canvas->drawImage(uploadedImage, 0, 0, &paint); canvas->restore(); offsetHeight += mipSize.height() + 10; @@ -123,16 +124,17 @@ static void DrawDeferredTextureImageMipMapTree(SkCanvas* canvas, SkImage* image, offsetHeight = 10; // handle base mipmap level canvas->save(); - canvas->translate(512.f + 20.f, offsetHeight); + canvas->translate(image->width() + 20.f, offsetHeight); canvas->drawImage(image, 0, 0, &paint); canvas->restore(); - offsetHeight += 512 + 10; + offsetHeight += image->height() + 10; // handle generated mipmap levels for (int i = 0; i < mipLevelCount; i++) { - SkISize mipSize = SkMipMap::ComputeLevelSize(512, 512, i); + SkISize mipSize = SkMipMap::ComputeLevelSize(image->width(), image->height(), i); canvas->save(); - canvas->translate(512.f + 20.f, offsetHeight); - canvas->scale(mipSize.width() / 512.f, mipSize.height() / 512.f); + canvas->translate(image->width() + 20.f, offsetHeight); + canvas->scale(mipSize.width() / static_cast<float>(image->width()), + mipSize.height() / static_cast<float>(image->height())); canvas->drawImage(image, 0, 0, &paint); canvas->restore(); offsetHeight += mipSize.height() + 10; @@ -182,4 +184,29 @@ DEF_SIMPLE_GM(deferred_texture_image_high, canvas, 512 + 512 + 30, 512 + 20) { DrawDeferredTextureImageData(canvas, ¶ms); } +DEF_SIMPLE_GM(deferred_texture_image_medium_encoded_indexed, canvas, 128 + 128 + 30, 340) { + sk_sp<SkImage> encodedImage = GetResourceAsImage("color_wheel.gif"); + if (!encodedImage) { + SkDebugf("\nCould not load resource.\n"); + return; + } + + auto params = SkImage::DeferredTextureImageUsageParams(SkMatrix::MakeScale(0.25f, 0.25f), + kMedium_SkFilterQuality, 0); + DrawDeferredTextureImageMipMapTree(canvas, encodedImage.get(), ¶ms); +} + +DEF_SIMPLE_GM(deferred_texture_image_medium_decoded_indexed, canvas, 128 + 128 + 30, 340) { + SkBitmap bitmap; + if (!GetResourceAsBitmap("color_wheel.gif", &bitmap)) { + SkDebugf("\nCould not decode resource.\n"); + return; + } + sk_sp<SkImage> decodedImage = SkImage::MakeFromBitmap(bitmap); + + auto params = SkImage::DeferredTextureImageUsageParams(SkMatrix::MakeScale(0.25f, 0.25f), + kMedium_SkFilterQuality, 0); + DrawDeferredTextureImageMipMapTree(canvas, decodedImage.get(), ¶ms); +} + #endif |