according to the article in game programming gems (the first one), submitting and rendering vertex info with gl*pointer and stride 0 are around 40% faster than glInterleaved arrays
but, all this time I had been coding with glInterleaved arrays because that is what my Superbible and a html on www.opengl.org said.
Which one is correct? or is this solely based on the card’s driver? the opengl superbible did mention that glInterleaved array leaves more room for the implementation to optimize.
Almost all performance issues are very implementation dependent. Interleaved array may be faster on one drivers and slower on another card. The only safe way is to benchmark. For NVIDIA cards, there is a performace FAQ on their page (there are two of them, one for old GeForce and one for GF3).
I don’t understand why is this less performing (using glInterleaved() instead of glDraw*()).
So, maybe the constructors develop their architecture for one type (array with glDraw*(), or display list…) and forget to do the same with the compliance.
I may be not well understandable.
it’s the same way to do for glInterleaved*() and glDraw*(): the datas are both on arrays (maybe on the vram), and there is only one array for the first and multiple arrays for the second. this is the only difference on the way to do. So, why the hardware think different ?
Lev, thanks a lot!
jide, look here (the faq), it might answer some of your questions… the answer is they are optimized… it just depends on how much control you want to have over the data… and the function over head (calling glVertex3f() a few thousand times is slower than calling glDrawElements() with arrays)
By the way, i couldn’t find the equivalent OpenGL performance FAQ on ATI’s site… does it even exist? if it does, can someone point me to it? If no one’s heard of such thing ont their site, should I send them an e-mail asking for it?