Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(244)

Unified Diff: src/core/SkSpecialImage.cpp

Issue 1772933002: Switch SkImageSource image filter over to new onFilterImage interface (Closed) Base URL: https://skia.googlesource.com/skia.git@if-follow-on
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
///////////////////////////////////////////////////////////////////////////////

Powered by Google App Engine
This is Rietveld 408576698