diff options
author | 2017-01-13 12:29:08 -0500 | |
---|---|---|
committer | 2017-01-13 18:48:00 +0000 | |
commit | cf5d6caff7a58f1c7ecc36d9a91ccdada5fc7b78 (patch) | |
tree | 918f47bdc667daab329de6ce01318e5cd6232dce /src/gpu | |
parent | 0497f088bb41338b1b1400556b9b690decc846fa (diff) |
Add SkImageInfoValidConversion() and SkImageInfoIsValid
The idea is share these standards for the following:
SkImage::readPixels()
SkCanvas::readPixels()
SkCanvas::writePixels()
SkBitmap::readPixels()
SkPixmap::readPixels()
On the raster side, SkPixmap::readPixels() is the right
place to check, because all raster calls go through
there eventually. Then at lower levels (ex: SkPixelInfo),
we can assert.
There's not really a unifying location for gpu calls,
so I've added this in multiple places. I haven't really
dug into the gpu code to SkASSERT() on invalid cases
that we will have already caught.
Follow-up work:
Similar refactor for SkReadPixelRec::trim().
Code cleanup in SkPixelInfo::CopyPixels()
BUG=skia:6021
Change-Id: I91ecce10e46c1a6530f0af24a9eb8226dbecaaa2
Reviewed-on: https://skia-review.googlesource.com/6887
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 258713c537..1dec0f6371 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -26,6 +26,7 @@ #include "SkImageCacherator.h" #include "SkImageFilter.h" #include "SkImageFilterCache.h" +#include "SkImageInfoPriv.h" #include "SkImage_Base.h" #include "SkLatticeIter.h" #include "SkMaskFilter.h" @@ -194,6 +195,10 @@ bool SkGpuDevice::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size int x, int y) { ASSERT_SINGLE_OWNER + if (!SkImageInfoValidConversion(dstInfo, this->imageInfo())) { + return false; + } + return fRenderTargetContext->readPixels(dstInfo, dstPixels, dstRowBytes, x, y); } @@ -201,6 +206,10 @@ bool SkGpuDevice::onWritePixels(const SkImageInfo& srcInfo, const void* srcPixel size_t srcRowBytes, int x, int y) { ASSERT_SINGLE_OWNER + if (!SkImageInfoValidConversion(this->imageInfo(), srcInfo)) { + return false; + } + return fRenderTargetContext->writePixels(srcInfo, srcPixels, srcRowBytes, x, y); } |