Problem with gl arrays.

Interleaved are fine until you want to do a second render pass which, for instance, doesn’t require the vertex normals (or primary/secondary colours). Then you’re transferring redundant data.

knackered, I can see now why it would be better to have them in separate arrays…
But you can also transfer all to HW and then just extract what you need, right? So data on card will be resistant. Or am I talking nonsense?

I don’t see the reason not to use InterleavedArrays. In my experience, it is pretty the same as to state every array separate… except, you must have all in one large array. Can’t see that can hurt?

Using the explicit InterleavedArrays call is not a great idea, as it doesn’t support the ARB_vertex_program attribute arrays (or any other extension-defined *pointer call). However, manually interleving your arrays is just fine.

Of course, as others have pointed out, if you do something like a shadow map or shadow volume pass (that only needs vertex data), you’re going to use up lots of extra bandwidth.

If it is the fact about those extensions, I’m with you guys. But I have some other thoughts :
first, what is the difference between these two calls :
InterleavedArrays(GL_V3F, stride1, vertices);
and
VertexPointer(size, GL_FLOAT, stride2, vertices); ?
second, if, for instance, coordinates are not packed tightly, someone (OpenGL or driver) must extract them from agregate array, either before or after sending them to graphic HW; so if this is true, what is the big differece anyway?
Of course, if all arrays are tight (i.e. they occupies different but consecutive memory range), it can speed up transfering data to HW. Maybe I just guessing, but what you think?