diff options
author | 2015-06-18 09:12:16 -0700 | |
---|---|---|
committer | 2015-06-18 09:12:17 -0700 | |
commit | 6dc6f5f4a153d33ed91565cb3cd397a310a937d0 (patch) | |
tree | a432ddf0638895a1d1d645876575aa64a9d9d6c7 /src/image | |
parent | 4c58e085b27c4cd9813ed7cad2388194d1d1f089 (diff) |
Add support for creating texture backed images where Skia will delete the texture.
Review URL: https://codereview.chromium.org/1187523005
Diffstat (limited to 'src/image')
-rw-r--r-- | src/image/SkImage.cpp | 4 | ||||
-rw-r--r-- | src/image/SkImage_Gpu.cpp | 27 | ||||
-rw-r--r-- | src/image/SkSurface_Gpu.cpp | 3 |
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; } |