From what I know, the VBO usage parameter we set when we call to glBufferData (http://www.opengl.org/sdk/docs/man/xhtml/glBufferData.xml) has no effects.
From my experiments (with some years old CG both ATI and nVidia), there’s no difference in timings whether I use STATIC_DRAW, DYNAMIC_DRAW or STREAM_DRAW, and whether I keep the same data in the VBO or I change the data of the VBO every frame.
Is this (still) true ?
It depends on what implementation you’re running and, most importantly, what you’re actually doing with it.
Well, the last made test is about drawing ellipses. Each ellipse is calculated each frame regarding factors like distance of the camera, and is clipped regarding the frustum.
So each ellipse could be rendered once (one DrawArray call if it is fully visible) or n times (threw n DrawArray calls if the ellipse is clipped). Each ellipse data is set inside a VBO (one VBO for each ellipse). The arrays consist of the vertices (4 values, double) and an attribute (1 value, double).
Each VBO has been set to STATIC_DRAW, DYNAMIC_DRAW or STREAM_DRAW for testing purposes. None of them had any impact on the time it takes to render the ellipse.
Ellipses are rendered with LINE_STRIP, LINES, POINTS or line-dots depending on the user behavior.
The last tests where made on Windows 7 64 bits, geforce 280, nvidia 285.62 and on Linux OpenSuze 64 bits, geforce 680, nvidia 301.x.
We don’t use OpenGL >= 3.0.
You didn’t explain the most important part: how you did your buffer streaming.