| 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;
|
|
|