Index: src/image/SkImage_Gpu.cpp |
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp |
index e773aed9484d4d0c7a7d552ce94bfb471d068d87..1d25635e870f3843fd675a2979cee4959dc91dab 100644 |
--- a/src/image/SkImage_Gpu.cpp |
+++ b/src/image/SkImage_Gpu.cpp |
@@ -152,82 +152,6 @@ SkImage* SkImage_Gpu::onNewSubset(const SkIRect& subset) const { |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
-class SkGpuImageFilterProxy : public SkImageFilter::Proxy { |
- GrContext* fCtx; |
- |
-public: |
- SkGpuImageFilterProxy(GrContext* ctx) : fCtx(ctx) {} |
- |
- SkBaseDevice* createDevice(int width, int height) override { |
- GrSurfaceDesc desc; |
- desc.fConfig = kSkia8888_GrPixelConfig; |
- desc.fFlags = kRenderTarget_GrSurfaceFlag; |
- desc.fWidth = width; |
- desc.fHeight = height; |
- desc.fSampleCnt = 0; |
- |
- SkAutoTUnref<GrTexture> texture(fCtx->textureProvider()->createTexture(desc, true)); |
- |
- if (texture) { |
- SkSurfaceProps props(0, kUnknown_SkPixelGeometry); |
- return SkGpuDevice::Create(texture->asRenderTarget(), width, height, &props, |
- SkGpuDevice::kClear_InitContents); |
- } else { |
- return nullptr; |
- } |
- } |
- |
- bool filterImage(const SkImageFilter* filter, const SkBitmap& src, |
- const SkImageFilter::Context& ctx, SkBitmap* dst, SkIPoint* offset) override { |
- return filter->canFilterImageGPU() && |
- filter->filterImageGPU(this, src, ctx, dst, offset); |
- } |
-}; |
- |
-static SkIRect compute_fast_ibounds(SkImageFilter* filter, const SkIRect& srcBounds) { |
- SkRect fastBounds; |
- fastBounds.set(srcBounds); |
- filter->computeFastBounds(fastBounds, &fastBounds); |
- return fastBounds.roundOut(); |
-} |
- |
-SkImage* SkImage_Gpu::onApplyFilter(SkImageFilter* filter, SkIPoint* offsetResult, |
- bool forceResultToOriginalSize) const { |
- const SkIRect srcBounds = SkIRect::MakeWH(this->width(), this->height()); |
- |
- if (forceResultToOriginalSize) { |
- SkBitmap src; |
- GrWrapTextureInBitmap(fTexture, this->width(), this->height(), this->isOpaque(), &src); |
- |
- const SkIRect clipBounds = srcBounds; |
- SkGpuImageFilterProxy proxy(fTexture->getContext()); |
- SkAutoTUnref<SkImageFilter::Cache> cache(SkGpuDevice::NewImageFilterCache()); |
- SkImageFilter::Context ctx(SkMatrix::I(), clipBounds, cache, SkImageFilter::kExact_SizeConstraint); |
- |
- SkBitmap dst; |
- if (!filter->filterImage(&proxy, src, ctx, &dst, offsetResult)) { |
- return nullptr; |
- } |
- return new SkImage_Gpu(dst.width(), dst.height(), kNeedNewImageUniqueID, dst.alphaType(), |
- dst.getTexture(), SkSurface::kNo_Budgeted); |
- } |
- |
- const SkIRect dstR = compute_fast_ibounds(filter, srcBounds); |
- |
- SkImageInfo info = SkImageInfo::MakeN32Premul(dstR.width(), dstR.height()); |
- SkAutoTUnref<SkSurface> surface(this->onNewSurface(info)); |
- |
- SkPaint paint; |
- paint.setImageFilter(filter); |
- surface->getCanvas()->drawImage(this, SkIntToScalar(-dstR.x()), SkIntToScalar(-dstR.y()), |
- &paint); |
- |
- offsetResult->set(dstR.x(), dstR.y()); |
- return surface->newImageSnapshot(); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////////////////////////// |
- |
static SkImage* new_wrapped_texture_common(GrContext* ctx, const GrBackendTextureDesc& desc, |
SkAlphaType at, GrWrapOwnership ownership, |
SkImage::TextureReleaseProc releaseProc, |