Move ANGLE to Sources/ThirdParty
[WebKit.git] / Sources / ThirdParty / ANGLE / src / libGLESv2 / Buffer.cpp
1 //
2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6
7 // Buffer.cpp: Implements the gl::Buffer class, representing storage of vertex and/or
8 // index data. Implements GL buffer objects and related functionality.
9 // [OpenGL ES 2.0.24] section 2.9 page 21.
10
11 #include "libGLESv2/Buffer.h"
12
13 namespace gl
14 {
15
16 Buffer::Buffer(GLuint id) : RefCountObject(id)
17 {
18     mContents = NULL;
19     mSize = 0;
20     mUsage = GL_DYNAMIC_DRAW;
21 }
22
23 Buffer::~Buffer()
24 {
25     delete[] mContents;
26 }
27
28 void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage)
29 {
30     if (size == 0)
31     {
32         delete[] mContents;
33         mContents = NULL;
34     }
35     else if (size != mSize)
36     {
37         delete[] mContents;
38         mContents = new GLubyte[size];
39         memset(mContents, 0, size);
40     }
41
42     if (data != NULL && size > 0)
43     {
44         memcpy(mContents, data, size);
45     }
46
47     mSize = size;
48     mUsage = usage;
49 }
50
51 void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset)
52 {
53     memcpy(mContents + offset, data, size);
54 }
55
56 }