Chromium Code Reviews| Index: src/core/SkSpecialImage.cpp |
| diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp |
| index 0bbe50a688607ac9415b23582d29d3b4a3b93578..b9d4f21fa13fe52c207c234327fe53b908fb0a96 100644 |
| --- a/src/core/SkSpecialImage.cpp |
| +++ b/src/core/SkSpecialImage.cpp |
| @@ -138,11 +138,23 @@ public: |
| GrTexture* onPeekTexture() const override { return as_IB(fImage.get())->peekTexture(); } |
| bool getBitmap(SkBitmap* result) const override { |
| - return false; |
| + if (GrTexture* texture = as_IB(fImage.get())->peekTexture()) { |
| + const SkImageInfo info = GrMakeInfoFromTexture(texture, |
| + fImage->width(), fImage->height(), |
| + fImage->isOpaque()); |
| + if (!result->setInfo(info)) { |
| + return false; |
| + } |
| + |
| + result->setPixelRef(new SkGrPixelRef(info, texture))->unref(); |
|
Stephen White
2016/03/07 21:47:26
I think this will break the no-GPU build, and prob
robertphillips
2016/03/08 16:45:29
Done.
I'll rename getBitmap in a separate CL thou
|
| + return true; |
| + } |
| + |
| + return as_IB(fImage.get())->asBitmapForImageFilters(result); |
| } |
| bool testingOnlyOnGetROPixels(SkBitmap* result) const override { |
| - return false; |
| + return fImage->asLegacyBitmap(result, SkImage::kRO_LegacyBitmapMode); |
| } |
| SkSpecialSurface* onNewSurface(const SkImageInfo& info) const override { |
| @@ -178,9 +190,11 @@ static bool rect_fits(const SkIRect& rect, int width, int height) { |
| } |
| #endif |
| -SkSpecialImage* SkSpecialImage::NewFromImage(const SkIRect& subset, const SkImage* image) { |
| +SkSpecialImage* SkSpecialImage::NewFromImage(SkImageFilter::Proxy* proxy, |
| + const SkIRect& subset, |
| + const SkImage* image) { |
| SkASSERT(rect_fits(subset, image->width(), image->height())); |
| - return new SkSpecialImage_Image(nullptr, subset, image); |
| + return new SkSpecialImage_Image(proxy, subset, image); |
| } |
| /////////////////////////////////////////////////////////////////////////////// |