throw invalid_operation("VertexArray::apply");
const VertexArray *old = current();
- if(!set_current(this))
+ /* If the array has been modified, apply it even if it was the last one to
+ be applied. This is necessary to get the data updated to vertex buffer, and
+ to resync things after a format change. Radeon drivers also have some
+ problems with modifying vertex arrays without re-setting the pointers. */
+ if(!set_current(this) && !dirty)
return;
if(vbuf)