xref: /aosp_15_r20/external/skia/src/gpu/ganesh/gl/GrGLBuffer.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2016 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 GrGLBuffer_DEFINED
9 #define GrGLBuffer_DEFINED
10 
11 #include "include/core/SkRefCnt.h"
12 #include "include/gpu/ganesh/gl/GrGLTypes.h"
13 #include "include/private/base/SkAssert.h"
14 #include "include/private/gpu/ganesh/GrTypesPriv.h"
15 #include "src/gpu/ganesh/GrGpuBuffer.h"
16 
17 #include <cstddef>
18 #include <string_view>
19 
20 class GrGLCaps;
21 class GrGLGpu;
22 class SkString;
23 class SkTraceMemoryDump;
24 
25 class GrGLBuffer : public GrGpuBuffer {
26 public:
27     static sk_sp<GrGLBuffer> Make(GrGLGpu*,
28                                   size_t size,
29                                   GrGpuBufferType intendedType,
30                                   GrAccessPattern);
31 
~GrGLBuffer()32     ~GrGLBuffer() override {
33         // either release or abandon should have been called by the owner of this object.
34         SkASSERT(0 == fBufferID);
35     }
36 
bufferID()37     GrGLuint bufferID() const { return fBufferID; }
38 
setHasAttachedToTexture()39     void setHasAttachedToTexture() { fHasAttachedToTexture = true; }
hasAttachedToTexture()40     bool hasAttachedToTexture() const { return fHasAttachedToTexture; }
41 
42 protected:
43     GrGLBuffer(GrGLGpu*,
44                size_t size,
45                GrGpuBufferType intendedType,
46                GrAccessPattern,
47                std::string_view label);
48 
49     void onAbandon() override;
50     void onRelease() override;
51     void setMemoryBacking(SkTraceMemoryDump* traceMemoryDump,
52                           const SkString& dumpName) const override;
53 
54 private:
55     GrGLGpu* glGpu() const;
56     const GrGLCaps& glCaps() const;
57 
58     void onMap(MapType) override;
59     void onUnmap(MapType) override;
60     bool onClearToZero() override;
61     bool onUpdateData(const void* src, size_t offset, size_t size, bool preserve) override;
62 
63     void onSetLabel() override;
64 
65     GrGpuBufferType fIntendedType;
66     GrGLuint        fBufferID;
67     GrGLenum        fUsage;
68     bool            fHasAttachedToTexture;
69 
70     using INHERITED = GrGpuBuffer;
71 };
72 
73 #endif
74