(I specified 2.1 because my laptop won’t go past that version. I would have probably done this anyway since 3.x and on introduces shaders as mandatory?).
Thanks to Wikipedia: http://en.wikipedia.org/wiki/Vertex_Buffer_Object I am starting to grasp how simple it can be to use VBO’s (I am still not positive about IBO’s?). What I have understood so far is the primary reason to use them is a performance boost gained due to the fact that data is now stored in video memory.
What I would like to know is how I am supposed to use them in a practical context. For instance, all of what I have seen has been setting up one Vertex Buffer Object and drawing one triangle or one cube, etc. What if I want to draw 2 or more? Do I set up a new VBO for each entity that I want to draw? Or do I magically append to some static VBO that I setup early on?
It depends, as the question is quite broad.
Using one VBO for the vertex attributes and one for the indices for each model/object/entity/mesh is the straight forward approach. You may benefit from storing all models in a single VBO, so you don’t have to bind buffers too often, but this brings in other problems when those models are not that static. Also, you may use multiple VBOs per object, maybe one for dynamic data and one for static data, or one for geometry data (position…) and one for material related data (texCoords…).
Using one VBO per object may have it’s (dis)advantages, as well as using a single huge VBO may not be that good an idea. It just depends on the concrete application and how well those concepts fit into it. But for the beginning, the straight-forward one-VBO-per-object approach is not that bad an idea. Just don’t use one VBO per triangle 😉