There seems to be some confusion regarding VBO and superbuffers. The way I understand it, they address two different parts of the GL.
Buffer objects address “byte memory” – GL memory whose fundamental unit is the byte, and it’s the type of memory that we can work with directly in terms of arrays. As with vertex arrays, we can directly access the memory contents of buffer objects and perform selective updates (e.g. cherry-picking just one or two vertices whose attributes we want to change). Traditionally, byte memory objects such as vertex arrays have been stored on the GL client side, usually on the host processor. Sending this memory to the GPU may require extra copying by the driver, which is expensive. The purpose of buffer objects is to extend API in a way such that such memory can be implemented on the GL server side, which on today’s architectures may be AGP memory. You can still cherry-pick individual vertices (in the specific case of vertex buffer objects) and get access to the individual bytes of the buffer object. Until you specify how you want to treat that buffer object (e.g. positions, texture coordinates, normals, etc.), it’s still fundamentally just a collection of bytes.
Superbuffers, in contrast, address “element memory,” whose fundamental unit is some sort of “element.” A common example of this type of GL memory today is the texture object. We have a block of memory that we first feed to GL using glTexImage*, but in that command we specify not only what the data is, but how to format it (RGBA, BGR, ALPHA, etc.). Once the memory is formatted, it forever stays that way. This type of memory is typically stored on the GL server side (e.g. GPU texture memory), and unlike byte memory, you can no longer gain access to the byte representation of that memory once you’ve created it. The superbuffers extension, as I understand it, is a generalization of element memory (previously available in the form of textures, off-screen pbuffers, etc.) so that we have greater flexibility in how we draw to this memory, re-use such memory for different operations, etc. The design of the API is such that (hopefully) the driver can make performance optimizations (e.g. avoiding expensive GPU buffer copies, etc.).
Hope this clarifies some issues. In summary, buffer objects and superbuffers handle different types of GL memory and the ways they are used.
Eric
so i don’t have problems not having a stride…