Comment glDrawArrays savoir quoi dessiner?

Je suis certains débutant tutoriels OpenGL, et je suis un peu confus au sujet de ce morceau de code:

glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject); //Bind GL_ARRAY_BUFFER to our handle
glEnableVertexAttribArray(0); //?
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); //Information about the array, 3 points for each vertex, using the float type, don't normalize, no stepping, and an offset of 0. I don't know what the first parameter does however, and how does this function know which array to deal with (does it always assume we're talking about GL_ARRAY_BUFFER?

glDrawArrays(GL_POINTS, 0, 1); //Draw the vertices, once again how does this know which vertices to draw? (Does it always use the ones in GL_ARRAY_BUFFER)

glDisableVertexAttribArray(0); //?
glBindBuffer(GL_ARRAY_BUFFER, 0); //Unbind

Je ne comprends pas comment glDrawArrays sait quels sommets de dessiner, et tous les trucs à faire avec glEnableVertexAttribArray est. Quelqu'un pourrait jeter quelque lumière sur la situation?