glCallLists() works a little differently as it takes a void pointer to a list of names (i.e. values returned by glGenLists()). However, the API is inconsistent since you don't get back an array and have to build that array yourself, if I'm not mistaken. In contrast, current APIs like glGenTextures(GLsizei n, GLuint * textures), let's you specify a pointer to a contiguous block of memory directly and the parameter list of glDeleteTextures(GLsizei n, GLuint* textures) matches the generation API. BTW, display lists are fast but also completely static once set up so they don't lend themselves to any streaming whatsoever. Also, since any state changes you compile into the list are static as well, you can't, for instance, change a texture you want to use on the same unit used in the list since the list will simply override it.

Originally Posted by tonyo_a

Display lists are deprecated - I wouldn't worry too much about them useless you are maintain old code

Display lists aren't deprecated. They have long been removed from core - with GL 3.1 to be exact.

Originally Posted by darkdav

Are you serious? What has replaced them then?

There is no direct correlate. The way to go today is using vertex buffer objects if you want to be portable (core GL only) or use the NV bindless stuff if you've got an NVIDIA GPU. The latter I haven't used myself but fellow board member Dark Photon suggested the following:

Originally Posted by Dark Photon

It gives you the absolute fastest possible batch launch I've ever seen. It ties NVidia display lists in performance, which is really stellar. If you have a lot of varied content (a lot of batches, and potentially a lot of buffers), batch launch speed is critical for maximum GPU utilization.

As I recall based on my testing a while back, in order of fastest-to-slowest performance, you have:

As I recall a streaming VBO surpasses static bound VBOs in perf, which is surprising because of all the CPU->GPU streaming. But this streaming pipelines very well, and you get rid of nearly all the buffer binding that you have with static bound VBOs.

Of course, how this all shakes out in practice depends on things like batch size, batches per buffer, number of batches and buffers, CPU and CPU memory speed, etc. The nice thing about bindless is that with it, batch/buffer sizes and number of batches/buffers matters a whole lot less. It's just a lot faster.

Before the end of the world finally hits us, you might want to check that stuff out.