1 // SwiftShader Software Renderer
3 // Copyright(c) 2005-2013 TransGaming Inc.
5 // All rights reserved. No part of this software may be copied, distributed, transmitted,
6 // transcribed, stored in a retrieval system, translated into any human or computer
7 // language by any means, or disclosed to third parties without the explicit written
8 // agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
9 // or implied, including but not limited to any patent rights, are granted to you.
12 // Buffer.cpp: Implements the Buffer class, representing storage of vertex and/or
13 // index data. Implements GL buffer objects and related functionality.
14 // [OpenGL ES 2.0.24] section 2.9 page 21.
19 #include "VertexDataManager.h"
20 #include "IndexDataManager.h"
25 Buffer::Buffer(GLuint id) : RefCountObject(id)
29 mUsage = GL_DYNAMIC_DRAW;
36 mContents->destruct();
40 void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage)
44 mContents->destruct();
53 const int padding = 1024; // For SIMD processing of vertices
54 mContents = new sw::Resource(size + padding);
58 return error(GL_OUT_OF_MEMORY);
63 memcpy((void*)mContents->getBuffer(), data, size);
68 void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset)
72 char *buffer = (char*)mContents->lock(sw::PUBLIC);
73 memcpy(buffer + offset, data, size);
78 sw::Resource *Buffer::getResource()