I believe that the reason is that you specify the same vertex many times instead of one time only using VBOs…
Yes, but a well-designed draw list compiler should be able to take care of that.
The reason why static VBOs should be faster than DLs is in the fact that DLs are more complicated than VBOs. Generaly, DLs can contain transformations, state changes, and cetera, besides the row data. VBOs are just buffers of data.
The deprecation model is introduced, not to alleviate life of programmers, but to enable easier drivers optimization. It is not an easy task to implement optimization of display lists.
Your comment is very good. Well-designed drivers WOULD gain highest performance with DLs, but… Optimization becomes harder and harder with every new functionality being added to GL.
The repetition of vertices depends on the function used for drawing. VBOs often contains multiple instances of the same vertex. This is the only way glDrawArays() can work.
When you look at all the new extensions of the last years, there is often the question “should this and that be included in display-lists”. Very often the answer is “no”, even if one might think that it could make sense from the idea of display lists in general. I think most of the time the reason is simply, to prevent having display lists become even more complicated to implement.
In the future i would like to see something like display lists return, but with a much better design, because from a performance point of view, especially considering multithreaded rendering, DLs COULD be the best thing, but only if it can be guaranteed, that all vendors can implement them with limited effort.
I also hope that DLs will be included into the Core of GL.