I never understood why it should be legal to use a texture id, that you didn’t generate previously. What did they smoke back then to allow such a complicated but completely useless “feature”?
Also, in some cases there is too much flexibility. For example i was always thinking, if there is a most hardware-friendly layout for vertex-arrays. Meaning, if it does matter to the hardware in which order i store my position/color/texcoord/… data. Maybe it doesn’t matter. But if it does, i want OpenGL to encapsulate it, so that i just say “here is the data, store it in the format you like best”. Just as textures are stored in the way the hardware likes best.
In some cases flexibility is nice. For example i really wouldn’t want to work without immediate mode. It’s just so useful to be able to simply render a few quads, even if it’s the slowest way possible.
I use display lists only for rendering text. And i think they make life very easy in this case. However, in general i think display lists could be layered.
However, in many cases flexibility makes life more complicated. It’s nice to do something the way you like best. But the moment you try to do it most optimal, you have a problem, because you don’t know, which is the most optimal way (and for which hardware??). So, in my oppinion, when a feature is performance critical, it should be very strict about how to use it, so that the driver only needs to handle and optimize ONE way, not 10.
I think OpenGL is very user-friendly and easy to learn. At least the basics. With all the extensions, many different ways to achieve the same thing and too much flexibility, the more advanced stuff is actually quite complicated. I think a “Lean and Mean” OpenGL would not only simplify and speed up drivers, but also make it easier for everybody to get to the fun-stuff.
And PLEASE, do it fast! OpenGL is dying a slow death for a long time now. We really need this.