Original Post
when you bind buffer objects: glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbObj); does this disable the current client states such as GL_VERTEX_ARRAY? The spec says that the buffer binding state does push/pop. so i'm assuming that this value will be restored when you do glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0). i'm just trying to figure out if I really need to update glVertexAttribPointerARB for every mesh. currently i am sorting static geometry by material and generating a vertex buffer for all surfaces that share the same material. many materials use the same shader program and have identical vertex formats, so i'm considering sorting these batches by shader (to minimize shader switching). what i'd like to do is only change glVertexAttribPointerARB when the shader changes. if the overhead is small i'll just shutup and deal with it i guess. i am also trying to determine how much my buffer objects (vertex buffer/index buffer) need to know about the vertex format. seems like they really don't need to know whats contained in the vertex, just the size. any thoughts would be appreciated.