Index: src/image/SkSurface_Gpu.cpp |
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp |
index 71bed3a9b9083a70bbc1afc9603f61df66ee0ea5..8bf30ad91ee114d215608b64ac4859955f4fc816 100644 |
--- a/src/image/SkSurface_Gpu.cpp |
+++ b/src/image/SkSurface_Gpu.cpp |
@@ -26,22 +26,34 @@ SkSurface_Gpu::~SkSurface_Gpu() { |
fDevice->unref(); |
} |
-GrBackendObject SkSurface_Gpu::onGetTextureHandle(TextureHandleAccess access) { |
- GrRenderTarget* rt = fDevice->accessRenderTarget(); |
+static GrRenderTarget* prepare_rt_for_external_access(SkSurface_Gpu* surface, |
+ SkSurface::BackendHandleAccess access) { |
+ GrRenderTarget* rt = surface->getDevice()->accessRenderTarget(); |
switch (access) { |
- case kFlushRead_TextureHandleAccess: |
+ case SkSurface::kFlushRead_BackendHandleAccess: |
rt->prepareForExternalRead(); // todo: rename to prepareForExternalAccess() |
break; |
- case kFlushWrite_TextureHandleAccess: |
- case kDiscardWrite_TextureHandleAccess: |
+ case SkSurface::kFlushWrite_BackendHandleAccess: |
+ case SkSurface::kDiscardWrite_BackendHandleAccess: |
// for now we don't special-case on Discard, but we may in the future. |
- this->notifyContentWillChange(kRetain_ContentChangeMode); |
+ surface->notifyContentWillChange(SkSurface::kRetain_ContentChangeMode); |
rt->flushWrites(); |
break; |
} |
+ return rt; |
+} |
+ |
+GrBackendObject SkSurface_Gpu::onGetTextureHandle(BackendHandleAccess access) { |
+ GrRenderTarget* rt = prepare_rt_for_external_access(this, access); |
return rt->asTexture()->getTextureHandle(); |
bsalomon
2015/06/30 15:49:58
Eek... this is an existing bug I should have caugh
|
} |
+bool SkSurface_Gpu::onGetRenderTargetHandle(GrBackendObject* obj, BackendHandleAccess access) { |
+ GrRenderTarget* rt = prepare_rt_for_external_access(this, access); |
+ *obj = rt->getRenderTargetHandle(); |
+ return true; |
+} |
+ |
SkCanvas* SkSurface_Gpu::onNewCanvas() { |
SkCanvas::InitFlags flags = SkCanvas::kDefault_InitFlags; |
// When we think this works... |