1 /* 2 * Copyright 2020 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "tools/gpu/BackendTextureImageFactory.h" 9 10 #include "include/core/SkImage.h" 11 #include "include/core/SkPixmap.h" 12 #include "include/gpu/GrBackendSurface.h" 13 #include "include/gpu/GrDirectContext.h" 14 #include "src/core/SkAutoPixmapStorage.h" 15 #include "tools/gpu/ManagedBackendTexture.h" 16 17 namespace sk_gpu_test { MakeBackendTextureImage(GrDirectContext * dContext,const SkPixmap & pixmap,GrRenderable renderable,GrSurfaceOrigin origin)18 sk_sp<SkImage> MakeBackendTextureImage(GrDirectContext* dContext, 19 const SkPixmap& pixmap, 20 GrRenderable renderable, 21 GrSurfaceOrigin origin) { 22 auto mbet = ManagedBackendTexture::MakeWithData(dContext, 23 pixmap, 24 origin, 25 renderable, 26 GrProtected::kNo); 27 if (!mbet) { 28 return nullptr; 29 } 30 return SkImage::MakeFromTexture(dContext, 31 mbet->texture(), 32 origin, 33 pixmap.colorType(), 34 pixmap.alphaType(), 35 pixmap.refColorSpace(), 36 ManagedBackendTexture::ReleaseProc, 37 mbet->releaseContext()); 38 } 39 MakeBackendTextureImage(GrDirectContext * dContext,const SkImageInfo & info,SkColor4f color,GrMipmapped mipmapped,GrRenderable renderable,GrSurfaceOrigin origin)40 sk_sp<SkImage> MakeBackendTextureImage(GrDirectContext* dContext, 41 const SkImageInfo& info, 42 SkColor4f color, 43 GrMipmapped mipmapped, 44 GrRenderable renderable, 45 GrSurfaceOrigin origin) { 46 if (info.alphaType() == kOpaque_SkAlphaType) { 47 color = color.makeOpaque(); 48 } else if (info.alphaType() == kPremul_SkAlphaType) { 49 auto pmColor = color.premul(); 50 color = {pmColor.fR, pmColor.fG, pmColor.fB, pmColor.fA}; 51 } 52 auto mbet = ManagedBackendTexture::MakeWithData(dContext, 53 info.width(), 54 info.height(), 55 info.colorType(), 56 color, 57 mipmapped, 58 renderable, 59 GrProtected::kNo); 60 if (!mbet) { 61 return nullptr; 62 } 63 return SkImage::MakeFromTexture(dContext, 64 mbet->texture(), 65 origin, 66 info.colorType(), 67 info.alphaType(), 68 info.refColorSpace(), 69 ManagedBackendTexture::ReleaseProc, 70 mbet->releaseContext()); 71 } 72 73 } // namespace sk_gpu_test 74