Exactly, you must be check if your data was correctly updated.
void Polyhedron::updateVBO(){
vtx_memory_size = sizeof(pos[0])*srf_pos.size();
glBindBuffer(GL_ARRAY_BUFFER, vbo_vtx_id);
glBufferData(GL_ARRAY_BUFFER, vtx_memory_size, 0, GL_STREAM_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, vtx_memory_size, &pos[0][0]);
// check data size in VBO is same as input array, if not return 0 and delete VBO
glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &bufferSize);
assert(vtx_memory_size == bufferSize);
glBindBuffer(GL_ARRAY_BUFFER, vbo_normal_id);
glBufferData(GL_ARRAY_BUFFER, vtx_memory_size, 0, GL_STREAM_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, vtx_memory_size, &normals[0][0]);
// aditionally
// create VBO for index array
// Target of this VBO is GL_ELEMENT_ARRAY_BUFFER and usage is GL_STATIC_DRAW
fdx_memory_size = sizeof(tris[0])*tris.size();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo_fdx_id); // activate vbo id to use
glBufferData(GL_ELEMENT_ARRAY_BUFFER, fdx_memory_size, &tris[0][0], GL_STATIC_DRAW); // upload data to video card
// check data size in VBO is same as input array, if not return 0 and delete VBO
glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &bufferSize);
assert(fdx_memory_size == bufferSize);
}
...
void Polyhedron::draw(){
glBindBuffer(GL_ARRAY_BUFFER, vbo_vtx_id);
glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));
// before draw, specify vertex and index arrays with their offsets
glBindBuffer(GL_ARRAY_BUFFER, vbo_normal_id);
glNormalPointer(GL_FLOAT, 0, BUFFER_OFFSET(0));
// Warning! make sure wich buffer is in use
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo_fdx_id);
glIndexPointer(GL_UNSIGNED_INT, 0, 0);
// enable vertex arrays
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawElements(GL_TRIANGLES, 3*tris.size(), GL_UNSIGNED_INT, (GLuint*)0 + 0);
glDisableClientState(GL_VERTEX_ARRAY); // disable vertex arrays
glDisableClientState(GL_NORMAL_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
Currently i’m using VBOs fine.