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.h: Defines 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#ifndef LIBGLESV2_BUFFER_H_ 12#define LIBGLESV2_BUFFER_H_ 13 14#include <cstddef> 15#include <vector> 16 17#define GL_APICALL 18#include <GLES2/gl2.h> 19 20#include "common/angleutils.h" 21#include "libGLESv2/RefCountObject.h" 22 23namespace gl 24{ 25class StaticVertexBuffer; 26class StaticIndexBuffer; 27 28class Buffer : public RefCountObject 29{ 30 public: 31 explicit Buffer(GLuint id); 32 33 virtual ~Buffer(); 34 35 void bufferData(const void *data, GLsizeiptr size, GLenum usage); 36 void bufferSubData(const void *data, GLsizeiptr size, GLintptr offset); 37 38 void *data() { return mContents; } 39 size_t size() const { return mSize; } 40 GLenum usage() const { return mUsage; } 41 42 StaticVertexBuffer *getVertexBuffer(); 43 StaticIndexBuffer *getIndexBuffer(); 44 void invalidateStaticData(); 45 46 private: 47 DISALLOW_COPY_AND_ASSIGN(Buffer); 48 49 GLubyte *mContents; 50 size_t mSize; 51 GLenum mUsage; 52 53 StaticVertexBuffer *mVertexBuffer; 54 StaticIndexBuffer *mIndexBuffer; 55}; 56 57} 58 59#endif // LIBGLESV2_BUFFER_H_ 60