My question is regarding the usage of InterleavedArray(InterleavedArrayFormat format,Int32 stride, [In, Out] object vertices): I cant think of a situation it would be needed?
I see, you are pinning the pointer to the interleaved vertex array (via GCHandle). I dont know so much about the very internals of OpenGL, but I dont think, the GL will copy the data from the [vertices] array? It rather simply stores the pointer, right? And as soon as the function returns, the same pointer will be used for methods like DrawElements etc. But this time the GCHandle will be released already! Well, it probably will work most the time anyway, but obviously mostly because
1) the vertices array will often be a large object - not beeing moved by the GC. (Very fragile!). Also,
2) subsequent methods (f.e. DrawElements) will probably be called soon after InterleavedArray. But one should not rely on the GC not cleaning up right after InterleavedArray and eventually moving the vertices array away, especially if 1 not holds. -> also fragile!
So for me the only valid method seem to be, to pin the vertices array in a fixed block and use the IntPtr overload of InterleavedArray. Am I missing something here?