OpenGLIndexBuffer::OpenGLIndexBuffer(const std::vector<uint32_t> &indices, BufferUsage bu): Buffer(bu), OpenGLObject(glGenBuffers, glDeleteBuffers), m_size(indices.size()*sizeof(uint32_t)), lockedPtr(nullptr) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, getID()); glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_size, indices.data(), BufferUsageOpenGLMap[getBufferUsage()]); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); }
OpenGLVertexBuffer::OpenGLVertexBuffer(const void *data, const uint32_t size, BufferUsage bu): Buffer(bu), OpenGLObject(glGenBuffers, glDeleteBuffers), m_size(size), lockedPtr(nullptr) { glBindBuffer(GL_ARRAY_BUFFER, getID()); glBufferData(GL_ARRAY_BUFFER, m_size, data, BufferUsageOpenGLMap[getBufferUsage()]); glBindBuffer(GL_ARRAY_BUFFER, 0); }
void GPUBuffer::setData(int size, const void *data, BufferUsage u) { assert(mappedData == NULL); this->size = size; glBindBuffer(GL_COPY_WRITE_BUFFER, bufferId); glBufferData(GL_COPY_WRITE_BUFFER, size, data, getBufferUsage(u)); glBindBuffer(GL_COPY_WRITE_BUFFER, 0); assert(FrameBuffer::getError() == GL_NO_ERROR); if (cpuData != NULL) { delete[] cpuData; cpuData = NULL; } #ifdef CUSTOM_MAP_BUFFER if (size < 1024) { cpuData = new unsigned char[size]; if (data != NULL) { memcpy(cpuData, (unsigned char*) data, size); } isDirty = false; } #endif }