aboutsummaryrefslogtreecommitdiffstats
path: root/src/gpu/SkGpuDevice.cpp
diff options
context:
space:
mode:
authorMike Reed <reed@google.com>2018-12-18 17:38:18 -0500
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2018-12-19 14:44:09 +0000
commit148b7fd3ad9c29dec0052de624c26ff291ef8f0a (patch)
treeaea5c960c5f50892fae7a8e5639c017f5fe451d0 /src/gpu/SkGpuDevice.cpp
parent435880277e1c50909affbbe554d614d86c7b62c2 (diff)
downloadplatform_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.cpp26
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());