当我使用glGenBuffers创建一个带有指针的VBO时,我(认为)正在分配内存。对glGenBuffers的后续调用应该返回不同的指针,但之前分配的内存呢?在Nehe的例子中,我没有看到"自由记忆"的调用。。。我读到openGL是一种"状态机",这是否意味着如果我的initializeBuffers()函数被调用多次,我就不需要释放任何东西,只需要"原样"使用glGenBuffers?
对于您执行的任何glGenBuffers
调用,都必须执行相应的glDeleteBuffers
调用。
请注意,传递给glGenBuffers
的指针未被分配/解除分配。事实上,甚至可能是这些调用实际上并没有在cpu内存中分配任何东西,但你也不能保证这一点。
您传递给glGenBuffers
的是一个已经分配的数组(或单个值),它将存储您引用gpu资源的"名称",工作流如下所示:
GLuint buffer; //Note: statically allocated
glGenBuffers(1, &buffer); // Allocate a GPU-resource - only updates value in buffer
//Work a bit with buffer
glDeleteBuffers(1, &buffer); //Deallocate the gpu-resource
buffer
作为指针传递的原因是因为您可以创建多个缓冲区,例如:
GLuint buffer[3]; //Note: again statically allocated
glGenBuffers(3, &buffer); // Allocate a GPU-resource - update values in buffer
//Work a bit with buffer
glDeleteBuffers(3, &buffer); //Deallocate the gpu-resource
当然,buffer
可以由您动态分配,例如:
std::vector<GLuint> buffer(3); //std::vector uses dynamic allocation
glGenBuffers(3, &buffer[0]); // Allocate a GPU-resource - update values in buffer
//Work a bit with buffer
glDeleteBuffers(3, &buffer[0]); //Deallocate the gpu-resource