aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/fiddle/fiddle_main.cpp
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-12-12 16:24:41 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-13 14:07:02 +0000
commit250e6e880f26840b200c46396af8d50facf1f2ae (patch)
treedc92e162ee1270e70af13b5de9b895bfa2612eb1 /tools/fiddle/fiddle_main.cpp
parentc8226728541fdd6434a7f1b97678246202b0edc5 (diff)
Fix red/blue swap with backend textures on fiddle
Bug: skia: Change-Id: I99962cdc909c785a2c5225fcc0ebe8cde3cd0358 Reviewed-on: https://skia-review.googlesource.com/83864 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'tools/fiddle/fiddle_main.cpp')
-rw-r--r--tools/fiddle/fiddle_main.cpp21
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;