diff options
author | Mike Reed <reed@google.com> | 2018-12-18 17:38:18 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-12-19 14:44:09 +0000 |
commit | 148b7fd3ad9c29dec0052de624c26ff291ef8f0a (patch) | |
tree | aea5c960c5f50892fae7a8e5639c017f5fe451d0 /src/gpu/SkGpuDevice.cpp | |
parent | 435880277e1c50909affbbe554d614d86c7b62c2 (diff) | |
download | platform_external_skqp-148b7fd3ad9c29dec0052de624c26ff291ef8f0a.tar.gz platform_external_skqp-148b7fd3ad9c29dec0052de624c26ff291ef8f0a.tar.bz2 platform_external_skqp-148b7fd3ad9c29dec0052de624c26ff291ef8f0a.zip |
add saveBehind to canvas
Bug: skia:
Change-Id: I62e48b116b2d7efef585d4f465441f24ae4d2b29
Reviewed-on: https://skia-review.googlesource.com/c/177892
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src/gpu/SkGpuDevice.cpp')
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index e82edbedd3..d413b3d8a7 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1255,6 +1255,32 @@ sk_sp<SkSpecialImage> SkGpuDevice::snapSpecial() { &this->surfaceProps()); } +sk_sp<SkSpecialImage> SkGpuDevice::snapBackImage(const SkIRect& subset) { + GrRenderTargetContext* rtc = this->accessRenderTargetContext(); + if (!rtc) { + return nullptr; + } + + GrContext* ctx = this->context(); + if (!rtc->asSurfaceProxy()) { + return nullptr; + } + + auto srcProxy = GrSurfaceProxy::Copy(ctx, rtc->asSurfaceProxy(), rtc->mipMapped(), subset, + rtc->asSurfaceProxy()->isBudgeted()); + if (!srcProxy) { + return nullptr; + } + + // Note, can't move srcProxy since we also refer to this in the 2nd parameter + return SkSpecialImage::MakeDeferredFromGpu(fContext.get(), + SkIRect::MakeSize(srcProxy->isize()), + kNeedNewImageUniqueID_SpecialImage, + srcProxy, + this->imageInfo().refColorSpace(), + &this->surfaceProps()); +} + void SkGpuDevice::drawDevice(SkBaseDevice* device, int left, int top, const SkPaint& paint) { SkASSERT(!paint.getImageFilter()); |