Quote Originally Posted by thokra View Post
The upper bound is defined as a function of both the values specified by glVertexAttribPointer and the draw call.
Right. And that bound is (at least to some extend) given if the data resides in a BufferObject. But this makes things just a little better 'cause the the upper part of the buffer may still not be intended to draw. Having an opportunity to give the upper bound explicitely would likely ease error-tracking as the range of indices that can accidently be drawn without triggering a segv gets narrowed down.
On the other hand - if the attributes reside in a buffer a draw-call maybe deffered in another thread to a later Point of time which makes tracking more difficult. But at least there is an implied upper bound which gives the opportunity for the GL-implementation to return with an appropriate error-code more easily (I guess signals/exceptions had to be cought otherwise - I seldomly run crashing code outside the Debugger so I don't have that much experience when it comes to the default-behaviour in such situations).