Right now, I have an object that sets the unmodified pointers up properly (which is not alltoo complicated but not near a noop either) which gets processed by another object that applies transformations to some of the vertices’ attributes, rebinding the transformed attributes’ buffers/pointers as needed.
So I know that the pointers set up by the first object will always be the same but some of them will get modified afterwards.
It would make sense to create a VAO if I could copy it - as I cannot copy, it makes no sense, as it makes no sense, there is none.
QED
So, you have some function A, which will set up some state within a VAO (either one you pass in or one it creates). And you have some function B, which you may or may not call on a VAO from A, that modifies some state in the VAO.
But you have a problem when you need multiple of the VAO’s from A, that have different forms of function B applied to them. And the only solution to this problem that you can see… is to copy the VAO? It never occurred to you to just create a new VAO and use A on it, thus giving you an exact duplicate copy of the first VAO from A?
QED is used at the end of a mathematical proof. You may have proven something, but I don’t think it’s what you intended.
Allow me to explain what I think your problem is (because otherwise, I must assume that you don’t realize that calling the same function twice will result in creating two identical objects, therefore having the effect of copying it).
Right now, I have an object that sets up a VAO. However, I will sometimes pass this VAO to another function that will modify the buffer bindings. But glVertexAttribPointer doesn’t just modify the buffer bindings; it also potentially changes the format. Therefore, that other function needs to know what the format data for a particular attribute is to be able to leave it unmodified. Which means I need to have pieces of the original function in the modified function.
If this is an accurate description of your problem, then I see two issues.
First, I don’t see how the ability to copy a VAO would help in any way, shape, or form. Your glVertexAttribPointer call will still need to know the format information either way.
Second, we can already do this. Or at least, “we” meaning NVIDIA; AMD is dragging their feet on 4.3 stuff.