Esempio n. 1
0
	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);
	}
Esempio n. 2
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);
	}
Esempio n. 3
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
}