I'm experimenting with rendering a Minecraft-like world in OpenGL. The world is split into chunks (each of them containing N^3 blocks) and these chunks get rendered each frame.
Currently I'm using one VAO per chunk. I always thought this is a bit odd, since every chunk uses the same vertex format - why can't I use a single VAO, and then draw each chunk by changing the index and vertex buffer bindings?
Recently I came across the GL_ARB_vertex_attrib_binding extension which is in core 4.3 and seems to address this problem - VAO and VBO bindings can be now separated. But there is no mention about index buffers bindings, which are still part of the VAO state, making the extension useless with indexed rendering. The only thing I can think of is updating the bound index buffer's contents for each chunk and vertex buffer binding change when rendering, but it makes little sense.
My question is, do I understand what the extension does correctly? If I do, is there another method I can use to avoid per-chunk VAOs without merging the per-chunk index buffers into one big IBO (as it would needlessly complicate chunk streaming management)?