Game Development Stack Exchange is a question and answer site for professional and independent game developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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.

share|improve this question
up vote 5 down vote accepted

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.

share|improve this answer
And if I remember VAOs correctly, binding a different one will cause glDraw* calls to execute across the new VAO's AttribPointers/Arrays, in the state they were in when they were bound?And I suppose in that case whatever my uniforms are set to will be used across everything bound to the current VAO's active AttribPointers/Arrays? – Stomy Jan 6 '13 at 22:17
Correct, on both accounts. :) – jmegaffin Jan 6 '13 at 22:28
Cool! Then my problems have been solved! :D – Stomy Jan 6 '13 at 22:34

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.