I’m currently writing my own 3d modeling package, and I’m a bit confused on the topic of vertex arrays and display lists. Since the 3d objects are continually changing, will either of these speed things up?
Display lists will capture the content of the vertex arrays sent while compiling the list. Vertex array state (glVertexPointer(<…> ), glEnableClientState(GL_VERTEX_ARRAY), etc) belongs to what the spec calls ‘client state’, and by definition doesn’t compile into DLs.
So you’re taking a snapshot. The display list will not track changes you make later.
If you have dynamic geometry, you cannot use display lists for that, you need to stay with vertex arrays.
To maximize your vertex throughput, you should have a look at the ARB_vertex_buffer_object extension , which allows you to transfer (and write) geometry to fast graphics card memory pretty elegantly. The extension is rather new, but it’s believed to quickly become the most widely supported and most optimal solution for vertex transfer.
ATI and NVIDIA both have it in their newer driver releases, and the smaller players are expected to follow suit.
IMO you should not bother with the older vendor centric extensions (NV_vertex_array_range, ATI_vertex_array_object).