Quote Originally Posted by Asylum View Post
In Metal for example you really have just one general-purpose buffer concept, and you can use it for whatever you want to.
That's what you have in OpenGL too.

The difference is that instead of always passing in these buffer objects as parameters to functions that use them (e.g. glVertexAttribPointer), you sometimes bind them to context-provided buffer bind targets first, and then those API calls read the buffer handles from there. The bind targets behave as implicit parameters to those functions.