|  | /* | 
|  | * Copyright 2020 Google LLC | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #include "tools/gpu/BackendTextureImageFactory.h" | 
|  |  | 
|  | #include "include/core/SkColorSpace.h" | 
|  | #include "include/core/SkImage.h" | 
|  | #include "include/core/SkPixmap.h" | 
|  | #include "include/gpu/GrBackendSurface.h" | 
|  | #include "include/gpu/GrDirectContext.h" | 
|  | #include "src/core/SkAutoPixmapStorage.h" | 
|  | #include "tools/gpu/ManagedBackendTexture.h" | 
|  |  | 
|  | namespace sk_gpu_test { | 
|  | sk_sp<SkImage> MakeBackendTextureImage(GrDirectContext* dContext, | 
|  | const SkPixmap& pixmap, | 
|  | GrRenderable renderable, | 
|  | GrSurfaceOrigin origin) { | 
|  | auto mbet = ManagedBackendTexture::MakeWithData(dContext, | 
|  | pixmap, | 
|  | origin, | 
|  | renderable, | 
|  | GrProtected::kNo); | 
|  | if (!mbet) { | 
|  | return nullptr; | 
|  | } | 
|  | return SkImage::MakeFromTexture(dContext, | 
|  | mbet->texture(), | 
|  | origin, | 
|  | pixmap.colorType(), | 
|  | pixmap.alphaType(), | 
|  | pixmap.refColorSpace(), | 
|  | ManagedBackendTexture::ReleaseProc, | 
|  | mbet->releaseContext()); | 
|  | } | 
|  |  | 
|  | sk_sp<SkImage> MakeBackendTextureImage(GrDirectContext* dContext, | 
|  | const SkImageInfo& info, | 
|  | SkColor4f color, | 
|  | GrMipmapped mipmapped, | 
|  | GrRenderable renderable, | 
|  | GrSurfaceOrigin origin) { | 
|  | if (info.alphaType() == kOpaque_SkAlphaType) { | 
|  | color = color.makeOpaque(); | 
|  | } else if (info.alphaType() == kPremul_SkAlphaType) { | 
|  | auto pmColor = color.premul(); | 
|  | color = {pmColor.fR, pmColor.fG, pmColor.fB, pmColor.fA}; | 
|  | } | 
|  | auto mbet = ManagedBackendTexture::MakeWithData(dContext, | 
|  | info.width(), | 
|  | info.height(), | 
|  | info.colorType(), | 
|  | color, | 
|  | mipmapped, | 
|  | renderable, | 
|  | GrProtected::kNo); | 
|  | if (!mbet) { | 
|  | return nullptr; | 
|  | } | 
|  | return SkImage::MakeFromTexture(dContext, | 
|  | mbet->texture(), | 
|  | origin, | 
|  | info.colorType(), | 
|  | info.alphaType(), | 
|  | info.refColorSpace(), | 
|  | ManagedBackendTexture::ReleaseProc, | 
|  | mbet->releaseContext()); | 
|  | } | 
|  |  | 
|  | }  // namespace sk_gpu_test |