diff options
Diffstat (limited to 'tools/fiddle/fiddle_main.cpp')
-rw-r--r-- | tools/fiddle/fiddle_main.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/tools/fiddle/fiddle_main.cpp b/tools/fiddle/fiddle_main.cpp index 92767d1b40..776e9d1dd4 100644 --- a/tools/fiddle/fiddle_main.cpp +++ b/tools/fiddle/fiddle_main.cpp @@ -10,6 +10,7 @@ #include <sstream> #include <string> +#include "SkAutoPixmapStorage.h" #include "SkCommandLineFlags.h" #include "SkMipMap.h" #include "SkUtils.h" @@ -135,13 +136,29 @@ static bool setup_backend_objects(GrContext* context, backingDesc.fSampleCnt = 0; if (!bm.empty()) { + SkPixmap originalPixmap; + SkPixmap* pixmap = &originalPixmap; + if (!bm.peekPixels(&originalPixmap)) { + return false; + } + + SkAutoPixmapStorage rgbaPixmap; + if (kN32_SkColorType != kRGBA_8888_SkColorType) { + if (!rgbaPixmap.tryAlloc(bm.info().makeColorType(kRGBA_8888_SkColorType))) { + return false; + } + if (!bm.readPixels(rgbaPixmap)) { + return false; + } + pixmap = &rgbaPixmap; + } int mipLevelCount = GrMipMapped::kYes == options.fMipMapping ? SkMipMap::ComputeLevelCount(bm.width(), bm.height()) : 1; std::unique_ptr<GrMipLevel[]> texels(new GrMipLevel[mipLevelCount]); - texels[0].fPixels = bm.getPixels(); - texels[0].fRowBytes = bm.rowBytes(); + texels[0].fPixels = pixmap->addr(); + texels[0].fRowBytes = pixmap->rowBytes(); for (int i = 1; i < mipLevelCount; i++) { texels[i].fPixels = nullptr; |