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