Vertex Array Objects

How about this for an extension to OpenGL.

In DX we can put data directly into the card and access it later on using vertex buffers.

How about extending the vertex arrays so that they can be stored and retrieved using an object identifier?

Just a thought, it’d make it slightly faster don’t you think?


It’s a good idea in theory but easy to screw up. For example, DX7 really screwed up vertex buffers in a bunch of ways. DX8 fixes some but not all of them. The result is that developers are finding they can’t do dynamic geometry as efficiently as they could otherwise in D3D.

There is a proposed extension, but I have not evaluated it yet, and therefore I will refrain from passing judgment. I will note that there are a ton of pitfalls that such an extension could have.

There are also memory management issues that show up, and those can be quite tricky as well.

So, for now, the only way to do this is with the vertex array range extension. Allocate a chunk of AGP memory, copy your vertices in (it’s app-managed; you should allocate just one buffer and then manage it however you like), and let the HW do its thing. Synchronization is also app-controlled using FlushVertexArrayRangeNV (an expensive operation) and the NV_fence extension (a much more lightweight way to sync, but more work).

  • Matt