Let's say that I have an array of vertices and a VBO pointer:
All of this is explained in the
glBufferData() man pages.
You don't need to keep an extra copy in your program's memory. The whole purpose of
glBufferData() is to copy data from your program to an OpenGL buffer, once the copy is complete, you can do whatever you want with your program memory.
If data is not NULL, the data store is initialized with data from this pointer.
Do not use
GL_STATIC_COPY, that is incorrect. The documentation reads:
The data store contents are modified by reading data from the GL, and used as the source for GL drawing and image specification commands.
GL_STATIC_COPY is only for internal copies between different OpenGL buffers, not for copies from your application to OpenGL. Use