blob: 7b44f14dc1cfa639b8b0f29d29e0c97c7eb8e1e3 [file] [log] [blame]
bsalomon@google.come49ad452013-02-20 19:33:20 +00001/*
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 "GrNoncopyable.h"
12#include "gl/GrGLFunctions.h"
13
14class 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 */
20class GrGLBufferImpl : public GrNoncopyable {
21public:
22 struct Desc {
23 bool fIsWrapped;
24 GrGLuint fID;
25 size_t fSizeInBytes;
26 bool fDynamic;
27 };
28
29 GrGLBufferImpl(GrGpuGL*, const Desc&, GrGLenum bufferType);
30 ~GrGLBufferImpl() {
31 // either release or abandon should have been called by the owner of this object.
32 GrAssert(0 == fDesc.fID);
33 }
34
35 void abandon();
36 void release(GrGpuGL* gpu);
37
38 GrGLuint bufferID() const { return fDesc.fID; }
39 size_t baseOffset() const { return 0; }
40
41 void bind(GrGpuGL* gpu) const;
42
43 void* lock(GrGpuGL* gpu);
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
49private:
50 Desc fDesc;
51 GrGLenum fBufferType; // GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER
52 void* fLockPtr;
53
54 typedef GrNoncopyable INHERITED;
55};
56
57#endif