7

当我使用 glGenBuffers 创建一个带有指向它的 VBO 时,我(认为)正在分配内存。对 glGenBuffers 的后续调用应该返回不同的指针,但是之前分配的内存呢?在 Nehe 示例中,我没有看到“空闲内存”调用......而且我读到 openGL 是一种“状态机”,这是否意味着如果我的 initializeBuffers() 函数被多次调用,我不会需要释放任何东西并“按原样”使用 glGenBuffers 吗?

4

1 回答 1

15

对于您拨打的任何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
于 2012-07-20T14:06:40.910 回答