• 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