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/gpu/gl/GrGLTypes.h" |
12 | #include "src/gpu/GrGpuBuffer.h" |
13 | |
14 | class GrGLGpu; |
15 | class GrGLCaps; |
16 | |
17 | class GrGLBuffer : public GrGpuBuffer { |
18 | public: |
19 | static sk_sp<GrGLBuffer> Make(GrGLGpu*, size_t size, GrGpuBufferType intendedType, |
20 | GrAccessPattern, const void* data = nullptr); |
21 | |
22 | ~GrGLBuffer() override { |
23 | // either release or abandon should have been called by the owner of this object. |
24 | SkASSERT(0 == fBufferID); |
25 | } |
26 | |
27 | GrGLuint bufferID() const { return fBufferID; } |
28 | |
29 | /** |
30 | * Returns the actual size of the underlying GL buffer object. In certain cases we may make this |
31 | * smaller than the size reported by GrGpuBuffer. |
32 | */ |
33 | size_t glSizeInBytes() const { return fGLSizeInBytes; } |
34 | |
35 | void setHasAttachedToTexture() { fHasAttachedToTexture = true; } |
36 | bool hasAttachedToTexture() const { return fHasAttachedToTexture; } |
37 | |
38 | protected: |
39 | GrGLBuffer(GrGLGpu*, size_t size, GrGpuBufferType intendedType, GrAccessPattern, |
40 | const void* data); |
41 | |
42 | void onAbandon() override; |
43 | void onRelease() override; |
44 | void setMemoryBacking(SkTraceMemoryDump* traceMemoryDump, |
45 | const SkString& dumpName) const override; |
46 | |
47 | private: |
48 | GrGLGpu* glGpu() const; |
49 | const GrGLCaps& glCaps() const; |
50 | |
51 | void onMap() override; |
52 | void onUnmap() override; |
53 | bool onUpdateData(const void* src, size_t srcSizeInBytes) override; |
54 | |
55 | #ifdef SK_DEBUG |
56 | void validate() const; |
57 | #endif |
58 | |
59 | GrGpuBufferType fIntendedType; |
60 | GrGLuint fBufferID; |
61 | GrGLenum fUsage; |
62 | size_t fGLSizeInBytes; |
63 | bool fHasAttachedToTexture; |
64 | |
65 | typedef GrGpuBuffer INHERITED; |
66 | }; |
67 | |
68 | #endif |
69 | |