Index: src/gpu/gl/GrGLBufferImpl.h |
diff --git a/src/gpu/gl/GrGLBufferImpl.h b/src/gpu/gl/GrGLBufferImpl.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a8f2cced372e6271e68fbba2c0373b2f3e28f9fd |
--- /dev/null |
+++ b/src/gpu/gl/GrGLBufferImpl.h |
@@ -0,0 +1,69 @@ |
+/* |
+ * Copyright 2013 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef GrGLBufferImpl_DEFINED |
+#define GrGLBufferImpl_DEFINED |
+ |
+#include "SkTypes.h" |
+#include "gl/GrGLTypes.h" |
+ |
+class GrGLGpu; |
+ |
+/** |
+ * This class serves as the implementation of GrGL*Buffer classes. It was written to avoid code |
+ * duplication in those classes. |
+ */ |
+class GrGLBufferImpl : SkNoncopyable { |
+public: |
+ enum Usage { |
+ kStaticDraw_Usage = 0, |
+ kDynamicDraw_Usage, |
+ kStreamDraw_Usage, |
+ kStreamRead_Usage, |
+ |
+ kLast_Usage = kStreamRead_Usage |
+ }; |
+ static const int kUsageCount = kLast_Usage + 1; |
+ |
+ struct Desc { |
+ GrGLuint fID; // set to 0 to indicate buffer is CPU-backed and not a VBO. |
+ size_t fSizeInBytes; |
+ Usage fUsage; |
+ }; |
+ |
+ GrGLBufferImpl(GrGLGpu*, const Desc&, GrGLenum bufferType); |
+ ~GrGLBufferImpl() { |
+ // either release or abandon should have been called by the owner of this object. |
+ SkASSERT(0 == fDesc.fID); |
+ } |
+ |
+ void abandon(); |
+ void release(GrGLGpu* gpu); |
+ |
+ GrGLuint bufferID() const { return fDesc.fID; } |
+ size_t baseOffset() const { return reinterpret_cast<size_t>(fCPUData); } |
+ GrGLenum bufferType() const { return fBufferType; } |
+ |
+ void* map(GrGLGpu* gpu); |
+ void unmap(GrGLGpu* gpu); |
+ bool isMapped() const; |
+ bool updateData(GrGLGpu* gpu, const void* src, size_t srcSizeInBytes); |
+ |
+private: |
+ void validate() const; |
+ |
+ Desc fDesc; |
+ GrGLenum fBufferType; // GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER, e.g. |
+ void* fCPUData; |
+ void* fMapPtr; |
+ size_t fGLSizeInBytes; // In certain cases we make the size of the GL buffer object |
+ // smaller or larger than the size in fDesc. |
+ |
+ typedef SkNoncopyable INHERITED; |
+}; |
+ |
+#endif |