aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/image
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2015-06-18 09:12:16 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-06-18 09:12:17 -0700
commit6dc6f5f4a153d33ed91565cb3cd397a310a937d0 (patch)
treea432ddf0638895a1d1d645876575aa64a9d9d6c7 /src/image
parent4c58e085b27c4cd9813ed7cad2388194d1d1f089 (diff)
Add support for creating texture backed images where Skia will delete the texture.
Diffstat (limited to 'src/image')
-rw-r--r--src/image/SkImage.cpp4
-rw-r--r--src/image/SkImage_Gpu.cpp27
-rw-r--r--src/image/SkSurface_Gpu.cpp3
3 files changed, 27 insertions, 7 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 4e563a048e..520255776f 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -209,6 +209,10 @@ SkImage* SkImage::NewFromTexture(GrContext*, const GrBackendTextureDesc&, SkAlph
return NULL;
}
+SkImage* SkImage::NewFromAdoptedTexture(GrContext*, const GrBackendTextureDesc&, SkAlphaType) {
+ return NULL;
+}
+
SkImage* SkImage::NewFromTextureCopy(GrContext*, const GrBackendTextureDesc&, SkAlphaType) {
return NULL;
}
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index dfb8f92170..281f762dff 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -114,16 +114,27 @@ bool SkImage_Gpu::onReadPixels(const SkImageInfo& info, void* pixels, size_t row
///////////////////////////////////////////////////////////////////////////////////////////////////
-SkImage* SkImage::NewFromTexture(GrContext* ctx, const GrBackendTextureDesc& desc, SkAlphaType at) {
+static SkImage* new_wrapped_texture_common(GrContext* ctx, const GrBackendTextureDesc& desc,
+ SkAlphaType at, GrWrapOwnership ownership) {
if (desc.fWidth <= 0 || desc.fHeight <= 0) {
return NULL;
}
- SkAutoTUnref<GrTexture> tex(ctx->textureProvider()->wrapBackendTexture(desc));
+ SkAutoTUnref<GrTexture> tex(ctx->textureProvider()->wrapBackendTexture(desc, ownership));
if (!tex) {
return NULL;
}
const SkSurface::Budgeted budgeted = SkSurface::kNo_Budgeted;
return SkNEW_ARGS(SkImage_Gpu, (desc.fWidth, desc.fHeight, at, tex, 0, budgeted));
+
+}
+
+SkImage* SkImage::NewFromTexture(GrContext* ctx, const GrBackendTextureDesc& desc, SkAlphaType at) {
+ return new_wrapped_texture_common(ctx, desc, at, kBorrow_GrWrapOwnership);
+}
+
+SkImage* SkImage::NewFromAdoptedTexture(GrContext* ctx, const GrBackendTextureDesc& desc,
+ SkAlphaType at) {
+ return new_wrapped_texture_common(ctx, desc, at, kAdopt_GrWrapOwnership);
}
SkImage* SkImage::NewFromTextureCopy(GrContext* ctx, const GrBackendTextureDesc& srcDesc,
@@ -134,7 +145,8 @@ SkImage* SkImage::NewFromTextureCopy(GrContext* ctx, const GrBackendTextureDesc&
if (srcDesc.fWidth <= 0 || srcDesc.fHeight <= 0) {
return NULL;
}
- SkAutoTUnref<GrTexture> src(ctx->textureProvider()->wrapBackendTexture(srcDesc));
+ SkAutoTUnref<GrTexture> src(ctx->textureProvider()->wrapBackendTexture(
+ srcDesc, kBorrow_GrWrapOwnership));
if (!src) {
return NULL;
}
@@ -199,9 +211,12 @@ SkImage* SkImage::NewFromYUVTexturesCopy(GrContext* ctx , SkYUVColorSpace colorS
vDesc.fWidth = yuvSizes[2].fWidth;
vDesc.fHeight = yuvSizes[2].fHeight;
- SkAutoTUnref<GrTexture> yTex(ctx->textureProvider()->wrapBackendTexture(yDesc));
- SkAutoTUnref<GrTexture> uTex(ctx->textureProvider()->wrapBackendTexture(uDesc));
- SkAutoTUnref<GrTexture> vTex(ctx->textureProvider()->wrapBackendTexture(vDesc));
+ SkAutoTUnref<GrTexture> yTex(ctx->textureProvider()->wrapBackendTexture(
+ yDesc, kBorrow_GrWrapOwnership));
+ SkAutoTUnref<GrTexture> uTex(ctx->textureProvider()->wrapBackendTexture(
+ uDesc, kBorrow_GrWrapOwnership));
+ SkAutoTUnref<GrTexture> vTex(ctx->textureProvider()->wrapBackendTexture(
+ vDesc, kBorrow_GrWrapOwnership));
if (!yTex || !uTex || !vTex) {
return NULL;
}
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp
index 20fcbf333e..0db3e8ceca 100644
--- a/src/image/SkSurface_Gpu.cpp
+++ b/src/image/SkSurface_Gpu.cpp
@@ -109,7 +109,8 @@ SkSurface* SkSurface::NewWrappedRenderTarget(GrContext* context, GrBackendTextur
if (!SkToBool(desc.fFlags & kRenderTarget_GrBackendTextureFlag)) {
return NULL;
}
- SkAutoTUnref<GrSurface> surface(context->textureProvider()->wrapBackendTexture(desc));
+ SkAutoTUnref<GrSurface> surface(context->textureProvider()->wrapBackendTexture(desc,
+ kBorrow_GrWrapOwnership));
if (!surface) {
return NULL;
}