aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2016-03-09 14:26:26 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-03-09 14:26:26 -0800
commit6ceeebd37a43d879c120b6ba100ae1febdd67a18 (patch)
tree6c4dfeb68ba4183bc2e63d8888ae01f24caede88 /src
parentf842c50116863f44240f806509f14e434eabb0a8 (diff)
unify peekPixels around pixmap parameter
Diffstat (limited to 'src')
-rw-r--r--src/core/SkCanvas.cpp24
-rw-r--r--src/core/SkSpecialImage.cpp8
-rw-r--r--src/gpu/SkGr.cpp2
-rw-r--r--src/image/SkImage.cpp41
-rw-r--r--src/image/SkImage_Base.h4
-rw-r--r--src/image/SkImage_Generator.cpp5
-rw-r--r--src/image/SkImage_Raster.cpp12
-rw-r--r--src/image/SkSurface.cpp18
8 files changed, 62 insertions, 52 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 35710fb317..d60e0e9211 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1335,18 +1335,24 @@ SkImageInfo SkCanvas::imageInfo() const {
}
}
+#ifdef SK_SUPPORT_LEGACY_PEEKPIXELS_PARMS
const void* SkCanvas::peekPixels(SkImageInfo* info, size_t* rowBytes) {
SkPixmap pmap;
- if (!this->onPeekPixels(&pmap)) {
- return nullptr;
- }
- if (info) {
- *info = pmap.info();
- }
- if (rowBytes) {
- *rowBytes = pmap.rowBytes();
+ if (this->peekPixels(&pmap)) {
+ if (info) {
+ *info = pmap.info();
+ }
+ if (rowBytes) {
+ *rowBytes = pmap.rowBytes();
+ }
+ return pmap.addr();
}
- 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 f5f88329c4..a55fe65029 100644
--- a/src/core/SkSpecialImage.cpp
+++ b/src/core/SkSpecialImage.cpp
@@ -114,11 +114,9 @@ public:
} 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 d7af8258c7..81a3502455 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -263,6 +263,8 @@ GrTexture* GrUploadPixmapToTexture(GrContext* ctx, const SkPixmap& pixmap) {
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 07279501a3..5e7cb07226 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -36,17 +36,29 @@ SkImage::SkImage(int width, int height, uint32_t uniqueID)
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(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 as_IB(this)->onPeekPixels(info, rowBytes);
+ return nullptr;
}
+#endif
bool SkImage::readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes,
int srcX, int srcY, CachingHint chint) const {
@@ -241,19 +253,6 @@ bool SkImage_Base::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, siz
///////////////////////////////////////////////////////////////////////////////////////////////////
-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 da87e42888..9e2efe98b5 100644
--- a/src/image/SkImage_Base.h
+++ b/src/image/SkImage_Base.h
@@ -26,7 +26,7 @@ public:
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 @@ private:
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 688b4ffe3b..95cc426a43 100644
--- a/src/image/SkImage_Generator.cpp
+++ b/src/image/SkImage_Generator.cpp
@@ -22,7 +22,6 @@ public:
{}
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 @@ bool SkImage_Generator::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels
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 d4debdf807..5bd0e1d8f1 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -67,7 +67,7 @@ public:
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 @@ bool SkImage_Raster::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, s
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 b018ef9756..9bec562df9 100644
--- a/src/image/SkSurface.cpp
+++ b/src/image/SkSurface.cpp
@@ -182,9 +182,25 @@ void SkSurface::draw(SkCanvas* canvas, SkScalar x, SkScalar y,
return asSB(this)->onDraw(canvas, x, y, paint);
}
+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) {
- return this->getCanvas()->peekPixels(info, 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) {