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); |
} |
/////////////////////////////////////////////////////////////////////////////// |