• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2019 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 #ifndef GrAHardwareBufferUtils_DEFINED
8 #define GrAHardwareBufferUtils_DEFINED
9 
10 #include "include/core/SkTypes.h"
11 
12 #if defined(SK_BUILD_FOR_ANDROID) && __ANDROID_API__ >= 26
13 
14 #include "include/gpu/GrBackendSurface.h"
15 #include "include/gpu/GrTypes.h"
16 
17 class GrDirectContext;
18 
19 extern "C" {
20     typedef struct AHardwareBuffer AHardwareBuffer;
21 }
22 
23 namespace GrAHardwareBufferUtils {
24 
25 SkColorType GetSkColorTypeFromBufferFormat(uint32_t bufferFormat);
26 
27 GrBackendFormat GetBackendFormat(GrDirectContext* context, AHardwareBuffer* hardwareBuffer,
28                                  uint32_t bufferFormat, bool requireKnownFormat);
29 
30 typedef void* TexImageCtx;
31 typedef void (*DeleteImageProc)(TexImageCtx);
32 typedef void (*UpdateImageProc)(TexImageCtx, GrDirectContext*);
33 
34 /**
35  * Create a GrBackendTexture from AHardwareBuffer
36  *
37  * @param   context         GPU context
38  * @param   hardwareBuffer  AHB
39  * @param   width           texture width
40  * @param   height          texture height
41  * @param   deleteProc      returns a function that deletes the texture and
42  *                          other GPU resources. Must be invoked on the same
43  *                          thread as MakeBackendTexture
44  * @param   updateProc      returns a function, that needs to be invoked, when
45  *                          AHB buffer content has changed. Must be invoked on
46  *                          the same thread as MakeBackendTexture
47  * @param   imageCtx        returns an opaque image context, that is passed as
48  *                          first argument to deleteProc and updateProc
49  * @param   isProtectedContent if true, GL backend uses EXT_protected_content
50  * @param   backendFormat   backend format, usually created with helper
51  *                          function GetBackendFormat
52  * @param   isRenderable    true if GrBackendTexture can be used as a color
53  *                          attachment
54  * @return                  valid GrBackendTexture object on success
55  */
56 GrBackendTexture MakeBackendTexture(GrDirectContext* context, AHardwareBuffer* hardwareBuffer,
57                                     int width, int height,
58                                     DeleteImageProc* deleteProc,
59                                     UpdateImageProc* updateProc,
60                                     TexImageCtx* imageCtx,
61                                     bool isProtectedContent,
62                                     const GrBackendFormat& backendFormat,
63                                     bool isRenderable);
64 
65 } // GrAHardwareBufferUtils
66 
67 
68 #endif
69 #endif
70