Index: src/core/SkSpecialSurface.cpp |
diff --git a/src/core/SkSpecialSurface.cpp b/src/core/SkSpecialSurface.cpp |
index 548552cc93a7aecbe0f8fc8a6644bdb9dc284fc5..429baddadd942ae7d6afd6ae29f4d34d937095a5 100644 |
--- a/src/core/SkSpecialSurface.cpp |
+++ b/src/core/SkSpecialSurface.cpp |
@@ -13,8 +13,9 @@ |
/////////////////////////////////////////////////////////////////////////////// |
class SkSpecialSurface_Base : public SkSpecialSurface { |
public: |
- SkSpecialSurface_Base(const SkIRect& subset, const SkSurfaceProps* props) |
- : INHERITED(subset, props) |
+ SkSpecialSurface_Base(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, const SkSurfaceProps* props) |
+ : INHERITED(proxy, subset, props) |
, fCanvas(nullptr) { |
} |
@@ -40,9 +41,12 @@ static SkSpecialSurface_Base* as_SB(SkSpecialSurface* surface) { |
return static_cast<SkSpecialSurface_Base*>(surface); |
} |
-SkSpecialSurface::SkSpecialSurface(const SkIRect& subset, const SkSurfaceProps* props) |
+SkSpecialSurface::SkSpecialSurface(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, |
+ const SkSurfaceProps* props) |
: fProps(SkSurfacePropsCopyOrDefault(props)) |
- , fSubset(subset) { |
+ , fSubset(subset) |
+ , fProxy(proxy) { |
SkASSERT(fSubset.width() > 0); |
SkASSERT(fSubset.height() > 0); |
} |
@@ -62,8 +66,11 @@ SkSpecialImage* SkSpecialSurface::newImageSnapshot() { |
class SkSpecialSurface_Raster : public SkSpecialSurface_Base { |
public: |
- SkSpecialSurface_Raster(SkPixelRef* pr, const SkIRect& subset, const SkSurfaceProps* props) |
- : INHERITED(subset, props) { |
+ SkSpecialSurface_Raster(SkImageFilter::Proxy* proxy, |
+ SkPixelRef* pr, |
+ const SkIRect& subset, |
+ const SkSurfaceProps* props) |
+ : INHERITED(proxy, subset, props) { |
const SkImageInfo& info = pr->info(); |
fBitmap.setInfo(info, info.minRowBytes()); |
@@ -75,7 +82,7 @@ public: |
~SkSpecialSurface_Raster() override { } |
SkSpecialImage* onNewImageSnapshot() override { |
- return SkSpecialImage::NewFromRaster(this->subset(), fBitmap); |
+ return SkSpecialImage::NewFromRaster(this->proxy(), this->subset(), fBitmap); |
} |
private: |
@@ -84,12 +91,14 @@ private: |
typedef SkSpecialSurface_Base INHERITED; |
}; |
-SkSpecialSurface* SkSpecialSurface::NewFromBitmap(const SkIRect& subset, SkBitmap& bm, |
+SkSpecialSurface* SkSpecialSurface::NewFromBitmap(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, SkBitmap& bm, |
const SkSurfaceProps* props) { |
- return new SkSpecialSurface_Raster(bm.pixelRef(), subset, props); |
+ return new SkSpecialSurface_Raster(proxy, bm.pixelRef(), subset, props); |
} |
-SkSpecialSurface* SkSpecialSurface::NewRaster(const SkImageInfo& info, |
+SkSpecialSurface* SkSpecialSurface::NewRaster(SkImageFilter::Proxy* proxy, |
+ const SkImageInfo& info, |
const SkSurfaceProps* props) { |
SkAutoTUnref<SkPixelRef> pr(SkMallocPixelRef::NewZeroed(info, 0, nullptr)); |
if (nullptr == pr.get()) { |
@@ -98,7 +107,7 @@ SkSpecialSurface* SkSpecialSurface::NewRaster(const SkImageInfo& info, |
const SkIRect subset = SkIRect::MakeWH(pr->info().width(), pr->info().height()); |
- return new SkSpecialSurface_Raster(pr, subset, props); |
+ return new SkSpecialSurface_Raster(proxy, pr, subset, props); |
} |
#if SK_SUPPORT_GPU |
@@ -108,8 +117,11 @@ SkSpecialSurface* SkSpecialSurface::NewRaster(const SkImageInfo& info, |
class SkSpecialSurface_Gpu : public SkSpecialSurface_Base { |
public: |
- SkSpecialSurface_Gpu(GrTexture* texture, const SkIRect& subset, const SkSurfaceProps* props) |
- : INHERITED(subset, props) |
+ SkSpecialSurface_Gpu(SkImageFilter::Proxy* proxy, |
+ GrTexture* texture, |
+ const SkIRect& subset, |
+ const SkSurfaceProps* props) |
+ : INHERITED(proxy, subset, props) |
, fTexture(SkRef(texture)) { |
SkASSERT(fTexture->asRenderTarget()); |
@@ -126,7 +138,8 @@ public: |
~SkSpecialSurface_Gpu() override { } |
SkSpecialImage* onNewImageSnapshot() override { |
- return SkSpecialImage::NewFromGpu(this->subset(), fTexture); |
+ return SkSpecialImage::NewFromGpu(this->proxy(), this->subset(), |
+ kNeedNewImageUniqueID_SpecialImage, fTexture); |
} |
private: |
@@ -135,16 +148,19 @@ private: |
typedef SkSpecialSurface_Base INHERITED; |
}; |
-SkSpecialSurface* SkSpecialSurface::NewFromTexture(const SkIRect& subset, GrTexture* texture, |
+SkSpecialSurface* SkSpecialSurface::NewFromTexture(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, |
+ GrTexture* texture, |
const SkSurfaceProps* props) { |
if (!texture->asRenderTarget()) { |
return nullptr; |
} |
- return new SkSpecialSurface_Gpu(texture, subset, props); |
+ return new SkSpecialSurface_Gpu(proxy, texture, subset, props); |
} |
-SkSpecialSurface* SkSpecialSurface::NewRenderTarget(GrContext* context, |
+SkSpecialSurface* SkSpecialSurface::NewRenderTarget(SkImageFilter::Proxy* proxy, |
+ GrContext* context, |
const GrSurfaceDesc& desc, |
const SkSurfaceProps* props) { |
if (!context || !SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag)) { |
@@ -158,17 +174,20 @@ SkSpecialSurface* SkSpecialSurface::NewRenderTarget(GrContext* context, |
const SkIRect subset = SkIRect::MakeWH(desc.fWidth, desc.fHeight); |
- return new SkSpecialSurface_Gpu(temp, subset, props); |
+ return new SkSpecialSurface_Gpu(proxy, temp, subset, props); |
} |
#else |
-SkSpecialSurface* SkSpecialSurface::NewFromTexture(const SkIRect& subset, GrTexture*, |
+SkSpecialSurface* SkSpecialSurface::NewFromTexture(SkImageFilter::Proxy* proxy, |
+ const SkIRect& subset, |
+ GrTexture*, |
const SkSurfaceProps*) { |
return nullptr; |
} |
-SkSpecialSurface* SkSpecialSurface::NewRenderTarget(GrContext* context, |
+SkSpecialSurface* SkSpecialSurface::NewRenderTarget(SkImageFilter::Proxy* proxy, |
+ GrContext* context, |
const GrSurfaceDesc& desc, |
const SkSurfaceProps* props) { |
return nullptr; |