• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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