I'm streaming positions/normals/uvcoords per frame to VBOs. On my Geforce 285 GTX (and on an old ATI FireGL) it runs nice, but customers report heavy lagging on Quadro FX 3700.
Since I wasn't able to repeat the problems on my 285, I bought a testing setup with that Quadro. And it's true: every 50-100 frames, the performance drops and the app stalls for some milliseconds.
Bound to OpenGL2.1, I simply used glBufferSubData since then. Now I tried it with orphaning using glBufferData(NULL) - and the lagging got worse!! Same with glMapBufferRange() and INVALIDATE.
After days of try and error, I discovered a driver setting in the nVidia Quadro control panel:
"Manage 3D Settings -> Global Presets -> Workstation app - Dynamic streaming"
(default is: "3D app - Default global settings").
Setting to "dynamic streaming", seems to solve all problems. Oh boy, my Geforce hasn't got this switch. So that expensive Quadro seems not smart enough to recognise an app that uses streaming, eh?
Now I'm interested in the underlying techniques. To me, it's not obvious what this setting changes. And how can I achieve these changes from within my app when default driver settings are used?