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