I keep
- VBO ids, so I can delete VBOs when I no longer need them.
- VAO id, so I can bind before drawing and delete eventually.
- Number of indices to pass to
glDrawElements()
- ids of all required textures.
- Material and transformation properties (uniforms in general).
This works fine as long as meshes are static. As soon as you want to manipulate your meshes on the CPU, for example smoothen or split them, you have to keep a copy in main memory. Maybe you also want to keep a low resolution placeholder, for example for more specialized rendering techniques like occlusion culling. But again, this is a special case; your question lists everything needed for basic rendering
Note: you should think about switching to glDrawElements()
. It will reduce the amount of vertex data you have to store and transfer.