• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017 Google Inc.
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 #ifndef GrBackendSurface_DEFINED
9 #define GrBackendSurface_DEFINED
10 
11 #include "GrTypes.h"
12 #include "gl/GrGLTypes.h"
13 #include "mock/GrMockTypes.h"
14 
15 #ifdef SK_VULKAN
16 #include "vk/GrVkTypes.h"
17 #endif
18 
19 class SK_API GrBackendTexture {
20 public:
21     // Creates an invalid backend texture.
GrBackendTexture()22     GrBackendTexture() : fConfig(kUnknown_GrPixelConfig) {}
23 
24     GrBackendTexture(int width,
25                      int height,
26                      GrPixelConfig config,
27                      const GrGLTextureInfo& glInfo);
28 
29 #ifdef SK_VULKAN
30     GrBackendTexture(int width,
31                      int height,
32                      const GrVkImageInfo& vkInfo);
33 #endif
34 
35     GrBackendTexture(int width,
36                      int height,
37                      GrPixelConfig config,
38                      const GrMockTextureInfo& mockInfo);
39 
width()40     int width() const { return fWidth; }
height()41     int height() const { return fHeight; }
config()42     GrPixelConfig config() const { return fConfig; }
backend()43     GrBackend backend() const {return fBackend; }
44 
45     // If the backend API is GL, this returns a pointer to the GrGLTextureInfo struct. Otherwise
46     // it returns nullptr.
47     const GrGLTextureInfo* getGLTextureInfo() const;
48 
49 #ifdef SK_VULKAN
50     // If the backend API is Vulkan, this returns a pointer to the GrVkImageInfo struct. Otherwise
51     // it returns nullptr.
52     const GrVkImageInfo* getVkImageInfo() const;
53 #endif
54 
55     // If the backend API is Mock, this returns a pointer to the GrMockTextureInfo struct. Otherwise
56     // it returns nullptr.
57     const GrMockTextureInfo* getMockTextureInfo() const;
58 
59 private:
isValid()60     bool isValid() const { return fConfig != kUnknown_GrPixelConfig; }
61 
62     // Temporary constructor which can be used to convert from a GrBackendTextureDesc.
63     GrBackendTexture(const GrBackendTextureDesc& desc, GrBackend backend);
64 
65     // Friending for access to above constructor taking a GrBackendTextureDesc
66     friend class SkImage;
67     friend class SkSurface;
68 
69     int fWidth;         //<! width in pixels
70     int fHeight;        //<! height in pixels
71     GrPixelConfig fConfig;
72     GrBackend fBackend;
73 
74     union {
75         GrGLTextureInfo fGLInfo;
76 #ifdef SK_VULKAN
77         GrVkImageInfo   fVkInfo;
78 #endif
79         GrMockTextureInfo fMockInfo;
80     };
81 };
82 
83 class SK_API GrBackendRenderTarget {
84 public:
85     GrBackendRenderTarget(int width,
86                           int height,
87                           int sampleCnt,
88                           int stencilBits,
89                           GrPixelConfig config,
90                           const GrGLFramebufferInfo& glInfo);
91 
92 #ifdef SK_VULKAN
93     GrBackendRenderTarget(int width,
94                           int height,
95                           int sampleCnt,
96                           int stencilBits,
97                           const GrVkImageInfo& vkInfo);
98 #endif
99 
width()100     int width() const { return fWidth; }
height()101     int height() const { return fHeight; }
sampleCnt()102     int sampleCnt() const { return fSampleCnt; }
stencilBits()103     int stencilBits() const { return fStencilBits; }
config()104     GrPixelConfig config() const { return fConfig; }
backend()105     GrBackend backend() const {return fBackend; }
106 
107     // If the backend API is GL, this returns a pointer to the GrGLFramebufferInfo struct. Otherwise
108     // it returns nullptr.
109     const GrGLFramebufferInfo* getGLFramebufferInfo() const;
110 
111 #ifdef SK_VULKAN
112     // If the backend API is Vulkan, this returns a pointer to the GrVkImageInfo struct. Otherwise
113     // it returns nullptr
114     const GrVkImageInfo* getVkImageInfo() const;
115 #endif
116 
117 private:
118     // Temporary constructor which can be used to convert from a GrBackendRenderTargetDesc.
119     GrBackendRenderTarget(const GrBackendRenderTargetDesc& desc, GrBackend backend);
120 
121     // Friending for access to above constructor taking a GrBackendTextureDesc
122     friend class SkSurface;
123 
124     int fWidth;         //<! width in pixels
125     int fHeight;        //<! height in pixels
126 
127     int fSampleCnt;
128     int fStencilBits;
129     GrPixelConfig fConfig;
130 
131     GrBackend fBackend;
132 
133     union {
134         GrGLFramebufferInfo fGLInfo;
135 #ifdef SK_VULKAN
136         GrVkImageInfo   fVkInfo;
137 #endif
138     };
139 };
140 
141 #endif
142 
143