Quote Originally Posted by kRogue View Post
[*]Removal of QUAD primitive types was, IMO, a mistake. One can simulate it with a geometry shader, but that seems awfully silly. As a side note, OpenGL ES3 does NOT have geometry shaders.
The main problem with quads was that their tessellation into triangles was unspecified, i.e. which diagonal was used for the split. It seems like it would have been simple enough to just specify the behaviour, although this might have had political ramifications (i.e. unless all drivers behaved the same way, any given choice would make some existing drivers "correct" and others "incorrect").

Quote Originally Posted by kRogue View Post
Removal of client side arrays (i.e. non-buffer object backed index and vertex buffers) was IMO a mistake as well. The use case of vertex and index data changing from frame to frame got ickier. With client side arrays, the GL implementation did the right thing for you.
The main problem with client-side arrays is that the implementation has to assume the least efficient scenario, i.e. that the entire contents of all arrays changes between every draw call. Forcing the use of buffers requires the user to specify the behaviour explicitly, rather than simply adopting the path of least effort (which is also the path of least efficiency).