c++ - glGenBuffers - 释放内存?

标签 c++ opengl graphics

当我使用 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

关于c++ - glGenBuffers - 释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11580940/

相关文章:

c++ - C 使用 Y/N 选项循环开关。选择 N 不会关闭程序

c++ - MFC C++ : TODO <file description> has stopped working

java - 如何用openGL生成Winamp风格的可视化效果? (奶滴等)

ubuntu - OpenGL 在 Ubuntu 中找不到任何 v3.3 函数

c++ - 类数据的重载+运算符

algorithm - 为自动索具找到重量绘画公式的因素

c++ - 如何在 OpenGL 中只平移场景中的一个对象?

java - 将 OBJ 文件中的四边形转换为三角形?

c++ - 将 3D 模型导入 OpenGL/C++ 项目的推荐文件格式和图形库?

c++ - 为什么结构的 sizeof 不等于每个成员的 sizeof 之和?