# What is actually drawn when glDrawArrays and glDrawElements are called?

In my journey out of immediate mode I've come across a snag that I haven't been able to find a decent answer for in any tutorial or API, namely: Which data structures are actually invoked when I make a call to a glDraw* function in OpenGL3.3+?

For example, if I want to draw two 3D models and I've put their vertex data in two different VBO's, does invoking glDrawArrays draw everything set under the current VAO? Or does it only draw the currently bound VBO sampling from the currently bound texture?

I basically understand VAO's and VBO's conceptually but its down to implementation that I'm running into problems, it's a big jump to go from the "stability" of immediate mode to the a-synchronicity of modern OpenGL.

glDrawArrays will draw from the currently bound vertex attribute arrays, which are "created" and bound themselves with glVertexAttribPointer and glEnableVertexAttribArray, which do use the currently bound vertex buffer. It doesn't matter if the vertex attributes are all from one buffer or multiple buffers, and you don't need any particular vertex buffer to be bound when drawing; all the glDraw* functions care about is which vertex attribute arrays are enabled.