A VAO (or Vertex Array Object) is basically an OpenGL object. They allow us to bind Vertex Buffers with a specification for the layout of that Vertex Buffer. A VAO can be bound just like a vertex buffer object and any subsequent vertex attribute calls from that point on will be stored inside the VAO. This has the advantage that when configuring vertex attribute pointers you only have to make those calls once and whenever we want to draw the object, we can just bind the corresponding VAO. This makes switching between different vertex data and attribute configurations as easy as binding a different VAO. One thing to is that Core OpenGL (OpenGL version 3.x and 4.x) requires that we use a VAO so it knows what to do with our vertex inputs. If we fail to bind a VAO, OpenGL will most likely refuse to draw anything.