No matter how you think a display list can be optimized, a VBO can be optimized the same way once instead of every frame.

Why would I need to optimize static geometry every frame? I've been going under the assumption that when you create a display list with the compile option, it never plays with the data again, just reads it.

Why would I need to optimize static geometry every frame? I've been going under the assumption that when you create a display list with the compile option, it never plays with the data again, just reads it.

Exactly! Furthermore, drivers pack your data in the optimal way along with all relevant information for later access.

VBOs are much simpler, and you should know how to pack data, what attributes to activate etc.

But, VBOs are what we have in core profile and should use.

It is a long story why there are profiles and why the old deprecated functionality still exists.

If you are happy with DLs continue to use them, but on the proper way, and they'll serve you well.

If you want to switch to non-deprecated functionality abandon them. VBOs are certainly the right way to do things, but you have to know your hw better.

Exactly! Furthermore, drivers pack your data in the optimal way along with all relevant information for later access. ... If you are happy with DLs continue to use them, but on the proper way, and they'll serve you well. If you want to switch to non-deprecated functionality abandon them. VBOs are certainly the right way to do things, but you have to know your hw better.

Right depends on your goals. For most of us, right isn't defined by core but most efficient use of the hardware (fastest performance).

So yes, agreed. If DL works for you use it. If you want more control over how your GPU memory is utilized, use static VBOs but you'll take a performance hit if you use them alone and you have to be smart about how you encode your data within them. If you happen to be running on NVidia and want VBOs with display list performance, use NV bindless to launch your batches with those VBOs. If not, then substitute VAOs in place of bindless -- it doesn't perform as well but it's better than nothing.

Also, the more data you pack in your VBOs (the larger your batches), the less likely you are to be CPU bound launching batches (which is for the most part what bindless and VAOs strive to reduce).