I have some experience with D3D11 but am currently looking into OpenGL.
I noticed that in OpenGL both the vertex buffers and the vertex layout are encapsulated together in a vertex array object.
Suppose I have a properly set up VAO and now decide that I want to use different vertex buffers that contain data in the same layout as before. At first I though I have to create a new VAO for this.
But then I stumbled over this quote in a text about vertex specifiation:
Better yet, if you want to use the same format but move the buffer around, it only takes one function call; namely glBindVertexBuffer with a buffer binding of 0. [...] Note again that all of the above state is still VAO state. It is all encapsulated in vertex array objects.