unify peekPixels around pixmap parameter
requires this chrome CL to land first
https://codereview.chromium.org/1775393003/
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1784563002
Review URL: https://codereview.chromium.org/1784563002
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 35710fb..d60e0e9 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1335,18 +1335,24 @@
}
}
+#ifdef SK_SUPPORT_LEGACY_PEEKPIXELS_PARMS
const void* SkCanvas::peekPixels(SkImageInfo* info, size_t* rowBytes) {
SkPixmap pmap;
- if (!this->onPeekPixels(&pmap)) {
- return nullptr;
+ if (this->peekPixels(&pmap)) {
+ if (info) {
+ *info = pmap.info();
+ }
+ if (rowBytes) {
+ *rowBytes = pmap.rowBytes();
+ }
+ return pmap.addr();
}
- if (info) {
- *info = pmap.info();
- }
- if (rowBytes) {
- *rowBytes = pmap.rowBytes();
- }
- return pmap.addr();
+ return nullptr;
+}
+#endif
+
+bool SkCanvas::peekPixels(SkPixmap* pmap) {
+ return this->onPeekPixels(pmap);
}
bool SkCanvas::onPeekPixels(SkPixmap* pmap) {
diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp
index f5f8832..a55fe65 100644
--- a/src/core/SkSpecialImage.cpp
+++ b/src/core/SkSpecialImage.cpp
@@ -114,11 +114,9 @@
} else
#endif
{
- SkImageInfo info;
- size_t rowBytes;
-
- if (fImage->peekPixels(&info, &rowBytes)) {
- return info.height() * rowBytes;
+ SkPixmap pm;
+ if (fImage->peekPixels(&pm)) {
+ return pm.height() * pm.rowBytes();
}
}
return 0;
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index d7af825..81a3502 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -263,6 +263,8 @@
return nullptr;
}
pmap = &tmpPixmap;
+ // must rebuild desc, since we've forced the info to be N32
+ desc = GrImageInfoToSurfaceDesc(pmap->info());
}
}
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 0727950..5e7cb07 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -36,18 +36,30 @@
SkASSERT(height > 0);
}
-const void* SkImage::peekPixels(SkImageInfo* info, size_t* rowBytes) const {
- SkImageInfo infoStorage;
- size_t rowBytesStorage;
- if (nullptr == info) {
- info = &infoStorage;
+bool SkImage::peekPixels(SkPixmap* pm) const {
+ SkPixmap tmp;
+ if (!pm) {
+ pm = &tmp;
}
- if (nullptr == rowBytes) {
- rowBytes = &rowBytesStorage;
- }
- return as_IB(this)->onPeekPixels(info, rowBytes);
+ return as_IB(this)->onPeekPixels(pm);
}
+#ifdef SK_SUPPORT_LEGACY_PEEKPIXELS_PARMS
+const void* SkImage::peekPixels(SkImageInfo* info, size_t* rowBytes) const {
+ SkPixmap pm;
+ if (this->peekPixels(&pm)) {
+ if (info) {
+ *info = pm.info();
+ }
+ if (rowBytes) {
+ *rowBytes = pm.rowBytes();
+ }
+ return pm.addr();
+ }
+ return nullptr;
+}
+#endif
+
bool SkImage::readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
int srcX, int srcY, CachingHint chint) const {
SkReadPixelsRec rec(dstInfo, dstPixels, dstRowBytes, srcX, srcY);
@@ -241,19 +253,6 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
-bool SkImage::peekPixels(SkPixmap* pmap) const {
- SkImageInfo info;
- size_t rowBytes;
- const void* pixels = this->peekPixels(&info, &rowBytes);
- if (pixels) {
- if (pmap) {
- pmap->reset(info, pixels, rowBytes);
- }
- return true;
- }
- return false;
-}
-
bool SkImage::readPixels(const SkPixmap& pmap, int srcX, int srcY, CachingHint chint) const {
return this->readPixels(pmap.info(), pmap.writable_addr(), pmap.rowBytes(), srcX, srcY, chint);
}
diff --git a/src/image/SkImage_Base.h b/src/image/SkImage_Base.h
index da87e42..9e2efe9 100644
--- a/src/image/SkImage_Base.h
+++ b/src/image/SkImage_Base.h
@@ -26,7 +26,7 @@
SkImage_Base(int width, int height, uint32_t uniqueID);
virtual ~SkImage_Base();
- virtual const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const { return nullptr; }
+ virtual bool onPeekPixels(SkPixmap*) const { return false; }
// Default impl calls onDraw
virtual bool onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
@@ -74,7 +74,7 @@
typedef SkImage INHERITED;
};
-static inline SkImage_Base* as_IB(SkImage* image) {
+static inline SkImage_Base* as_IB(SkImage* image) {
return static_cast<SkImage_Base*>(image);
}
diff --git a/src/image/SkImage_Generator.cpp b/src/image/SkImage_Generator.cpp
index 688b4ff..95cc426 100644
--- a/src/image/SkImage_Generator.cpp
+++ b/src/image/SkImage_Generator.cpp
@@ -22,7 +22,6 @@
{}
bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY, CachingHint) const override;
- const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const override;
SkImageCacherator* peekCacherator() const override { return fCache; }
SkData* onRefEncoded(GrContext*) const override;
bool isOpaque() const override { return fCache->info().isOpaque(); }
@@ -62,10 +61,6 @@
return false;
}
-const void* SkImage_Generator::onPeekPixels(SkImageInfo* infoPtr, size_t* rowBytesPtr) const {
- return NULL;
-}
-
SkData* SkImage_Generator::onRefEncoded(GrContext* ctx) const {
return fCache->refEncoded(ctx);
}
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index d4debdf..5bd0e1d 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -67,7 +67,7 @@
virtual ~SkImage_Raster();
bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY, CachingHint) const override;
- const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const override;
+ bool onPeekPixels(SkPixmap*) const override;
SkData* onRefEncoded(GrContext*) const override;
bool getROPixels(SkBitmap*, CachingHint) const override;
GrTexture* asTextureRef(GrContext*, const GrTextureParams&) const override;
@@ -140,14 +140,8 @@
return shallowCopy.readPixels(dstInfo, dstPixels, dstRowBytes, srcX, srcY);
}
-const void* SkImage_Raster::onPeekPixels(SkImageInfo* infoPtr, size_t* rowBytesPtr) const {
- const SkImageInfo info = fBitmap.info();
- if ((kUnknown_SkColorType == info.colorType()) || !fBitmap.getPixels()) {
- return nullptr;
- }
- *infoPtr = info;
- *rowBytesPtr = fBitmap.rowBytes();
- return fBitmap.getPixels();
+bool SkImage_Raster::onPeekPixels(SkPixmap* pm) const {
+ return fBitmap.peekPixels(pm);
}
SkData* SkImage_Raster::onRefEncoded(GrContext*) const {
diff --git a/src/image/SkSurface.cpp b/src/image/SkSurface.cpp
index b018ef9..9bec562 100644
--- a/src/image/SkSurface.cpp
+++ b/src/image/SkSurface.cpp
@@ -182,10 +182,26 @@
return asSB(this)->onDraw(canvas, x, y, paint);
}
-const void* SkSurface::peekPixels(SkImageInfo* info, size_t* rowBytes) {
- return this->getCanvas()->peekPixels(info, rowBytes);
+bool SkSurface::peekPixels(SkPixmap* pmap) {
+ return this->getCanvas()->peekPixels(pmap);
}
+#ifdef SK_SUPPORT_LEGACY_PEEKPIXELS_PARMS
+const void* SkSurface::peekPixels(SkImageInfo* info, size_t* rowBytes) {
+ SkPixmap pm;
+ if (this->peekPixels(&pm)) {
+ if (info) {
+ *info = pm.info();
+ }
+ if (rowBytes) {
+ *rowBytes = pm.rowBytes();
+ }
+ return pm.addr();
+ }
+ return nullptr;
+}
+#endif
+
bool SkSurface::readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
int srcX, int srcY) {
return this->getCanvas()->readPixels(dstInfo, dstPixels, dstRowBytes, srcX, srcY);