• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2013 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 GrGLBufferImpl_DEFINED
9 #define GrGLBufferImpl_DEFINED
10 
11 #include "SkTypes.h"
12 #include "gl/GrGLFunctions.h"
13 
14 class GrGpuGL;
15 
16 /**
17  * This class serves as the implementation of GrGL*Buffer classes. It was written to avoid code
18  * duplication in those classes.
19  */
20 class GrGLBufferImpl : public SkNoncopyable {
21 public:
22     struct Desc {
23         bool        fIsWrapped;
24         GrGLuint    fID;            // set to 0 to indicate buffer is CPU-backed and not a VBO.
25         size_t      fSizeInBytes;
26         bool        fDynamic;
27     };
28 
29     GrGLBufferImpl(GrGpuGL*, const Desc&, GrGLenum bufferType);
~GrGLBufferImpl()30     ~GrGLBufferImpl() {
31         // either release or abandon should have been called by the owner of this object.
32         SkASSERT(0 == fDesc.fID);
33     }
34 
35     void abandon();
36     void release(GrGpuGL* gpu);
37 
bufferID()38     GrGLuint bufferID() const { return fDesc.fID; }
baseOffset()39     size_t baseOffset() const { return reinterpret_cast<size_t>(fCPUData); }
40 
41     void bind(GrGpuGL* gpu) const;
42 
43     void* lock(GrGpuGL* gpu);
lockPtr()44     void* lockPtr() const { return fLockPtr; }
45     void unlock(GrGpuGL* gpu);
46     bool isLocked() const;
47     bool updateData(GrGpuGL* gpu, const void* src, size_t srcSizeInBytes);
48 
49 private:
50     void validate() const;
51 
52     Desc         fDesc;
53     GrGLenum     fBufferType; // GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER
54     void*        fCPUData;
55     void*        fLockPtr;
56 
57     typedef SkNoncopyable INHERITED;
58 };
59 
60 #endif
61