   2D Game from VA to VBO
  I'm using OpenGL for a 2D game. My drawing is all done in an immediate mode-like API (sprite.draw(10, 10)), so there's not a lot of room for optimization or sorting. But what I have used to speed up text rendering and particles significantly is batching consecutive operations that have identical rendering state into a single vertex array.Now I'm wondering, what kind of benefits could I get from switching to VBOs in this situation, and what would be the best way to apply them? It seemed to me at first that VBOs wouldn't provide any benefit in this usage scenario, because I'm still sending mostly individual quads with the occasional batch in mostly random order, and all the data is entirely different from frame to frame. But then I read that VBOs can provide the driver the opportunity to render asynchronously. However, if I just replace the VA with a single VBO, I'll be continually filling it with new data, so my app would still have to block for the rendering to complete. So my current theory is to use a rotation of VBOs, perhaps 3 or 5, and use them in sequence so that by the time I need to reuse a VBO its already been rendered and my app doesn't block. But before I try this, I just wanted to see if this seems like a good idea, or if it won't yield much performance gain, or even if there's enough overhead to VBOs that using them for mostly individual quads will actually worsen performance. So can anyone give their thoughts on this OpenGL newbies plan?   
  I found that for sprites (where you rebuild the vertex data from scratch every frame) there wasn't any performance difference between vertex arrays and VBOs. Which makes sense, since the bottleneck in both cases is moving the data from main memory to video memory.However if your data doesn't change (a tile map for example, could be built once at level load) or if you're re-rendering the same sprites multiple times in a frame (like a mini-map, or split screen) then with VBOs the second draw is much faster (since it doesn't have to move the data again, it's already cached and present in video memory).   ;  Ok then, thanks for the help. You've definitely saved me some needless complexity and the ensuing disappointment when it does little good.   