I'm moving into the VBO domain a bit more and I'm curious about updating data that changes rapidly.
My current application requires me to animate maybe a half million moving, lit, transparent triangles from a FE mesh. My old implementation has me doing this by sorting the tris at each step and then drawing them in immediate mode. It worked, but the performance wasn't stunning -- mainly because of the immediate mode (the sort is cheapish due to the use of spatial partitioning).
My question lies around the most efficient method of getting this data to the card. Because the vertex data is modified on the fly by a fairly nasty multicore algorithm, I really need to update the vertex data every render. And because of the transparency, I also need to update the element indicies every render. My new implementation uses VBOs (and will use shaders shortly) and I keep my data updated by calling GL.BufferData() in conjunction with BufferUsageHint.StreamDraw on every tick. Is that as efficient as I can get? I've definitely seen a performance boost, but I'm curious whether there's anything left to squeeze out of this aspect.