On 22/11/06, Stefan Dösinger stefandoesinger@gmx.at wrote:
I noticed that loadVertexData already disables stream sources that aren't available in the current draws, while loadNumberedArrays doesn't. Do we need unloadVertexData at all? Or are non-drawing operations or drawStridedSlow affected by arrays?
Well, the issue is when you switch between fixed function and shader based drawing. Eg, if an array from a previous fixed function draw primitive call is still active while drawing with a shader, you can potentially access the fixed function array beyond its bounds. That was the actual issue that prompted me to write the patch, and it turned out to also fix the 3DMark03 VBO performance regression.
Another issue which you might run into with you state management work is that at least on nVidia hardware the fixed function and shader arrays are aliases for eachother.
Background is that I'm atm working on using dirtification to manage stream sources. So far the state management is progressing nicely, what is missing atm are Shaders, re-enabling register combiners and fixing regressions which slipped in(hl2 and bf1942). Then optimizations :-)
Something that occured to me yesterday after we talked on IRC is that we should probably use glPushClientAttrib / glPopClientAttrib to do the disabling after we're done drawing.