blob: 87d4185e4a4a57851c611712895757d04e6da8ed [file] [log] [blame]
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00001//
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
daniel@transgaming.combbf56f72010-04-20 18:52:13 +000011#include "libGLESv2/Buffer.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000012
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000013namespace gl
14{
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000015
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000016Buffer::Buffer()
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000017{
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000018 mContents = NULL;
19 mSize = 0;
20 mUsage = GL_DYNAMIC_DRAW;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000021}
22
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000023Buffer::~Buffer()
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000024{
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000025 delete[] mContents;
26}
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000027
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000028void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage)
29{
daniel@transgaming.comc103b602010-04-23 18:34:58 +000030 if (size == 0)
31 {
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000032 delete[] mContents;
33 mContents = NULL;
daniel@transgaming.comc103b602010-04-23 18:34:58 +000034 }
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000035 else if (size != mSize)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000036 {
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000037 delete[] mContents;
38 mContents = new GLubyte[size];
39 memset(mContents, 0, size);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000040 }
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000041
42 if (data != NULL && size > 0)
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000043 {
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000044 memcpy(mContents, data, size);
daniel@transgaming.com0f7aaf52010-03-11 19:41:38 +000045 }
46
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000047 mSize = size;
daniel@transgaming.comaa0ccbd2010-04-15 20:45:05 +000048 mUsage = usage;
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000049}
50
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000051void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000052{
daniel@transgaming.comdefa1c32010-05-18 18:51:45 +000053 memcpy(mContents + offset, data, size);
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000054}
55
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000056}