However, the disadvantage of vertex array is that vertex array functions are in the client state and the data in the arrays must be re-sent to the server each time when it is referenced.
Creating a VBO requires 3 steps; gl Gen Buffers ARB() creates buffer objects and returns the identifiers of the buffer objects.
Because VBO sits on top of the existing vertex array implementation, rendering VBO is almost same as using vertex array.
Only difference is that the pointer to the vertex array is now as an offset into a currently bound buffer object.
Note that this target flag assists VBO to decide the most efficient locations of buffer objects, for example, some systems may prefer indices in AGP or system memory, and vertices in video memory.
Once gl Bind Buffer ARB() is first called, VBO initializes the buffer with a zero-sized memory buffer and set the initial VBO states, such as usage and access properties.