1
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#ifndef GrBufferObj_DEFINED
10#define GrBufferObj_DEFINED
11
12#include "GrFakeRefObj.h"
13#include "../GrGLDefines.h"
14
15////////////////////////////////////////////////////////////////////////////////
16class GrBufferObj : public GrFakeRefObj {
17    GR_DEFINE_CREATOR(GrBufferObj);
18
19public:
20    GrBufferObj()
21        : GrFakeRefObj()
22        , fDataPtr(nullptr)
23        , fMapped(false)
24        , fBound(false)
25        , fSize(0)
26        , fUsage(GR_GL_STATIC_DRAW) {
27    }
28    virtual ~GrBufferObj() {
29        delete[] fDataPtr;
30    }
31
32    void access() {
33        // cannot access the buffer if it is currently mapped
34        GrAlwaysAssert(!fMapped);
35    }
36
37    void setMapped(GrGLintptr offset, GrGLsizeiptr length) {
38        fMapped = true;
39        fMappedOffset = offset;
40        fMappedLength = length;
41    }
42    void resetMapped()           { fMapped = false; }
43    bool getMapped() const       { return fMapped; }
44    GrGLintptr getMappedOffset() const { return fMappedOffset; }
45    GrGLsizeiptr getMappedLength() const { return fMappedLength; }
46
47    void setBound()              { fBound = true; }
48    void resetBound()            { fBound = false; }
49    bool getBound() const        { return fBound; }
50
51    void allocate(GrGLsizeiptr size, const GrGLchar *dataPtr);
52    GrGLsizeiptr getSize() const { return fSize; }
53    GrGLchar *getDataPtr()       { return fDataPtr; }
54
55    void setUsage(GrGLint usage) { fUsage = usage; }
56    GrGLint getUsage() const     { return fUsage; }
57
58    void deleteAction() override;
59
60protected:
61private:
62
63    GrGLchar*    fDataPtr;
64    bool         fMapped;       // is the buffer object mapped via "glMapBuffer[Range]"?
65    GrGLintptr   fMappedOffset; // the offset of the buffer range that is mapped
66    GrGLsizeiptr fMappedLength; // the size of the buffer range that is mapped
67    bool         fBound;        // is the buffer object bound via "glBindBuffer"?
68    GrGLsizeiptr fSize;         // size in bytes
69    GrGLint      fUsage;        // one of: GL_STREAM_DRAW,
70                                //         GL_STATIC_DRAW,
71                                //         GL_DYNAMIC_DRAW
72
73    typedef GrFakeRefObj INHERITED;
74};
75
76#endif // GrBufferObj_DEFINED
77