1

这更像是一个有直接答案的讨论问题。我正在 OpenGL 中开发一个相当简单的场景,并且遇到了我正在使用的类结构的问题。我有一个“原始”基类,从中构建派生类,例如 Cube、Tetrahedron、Sphere 等。基类包含有关对象的所有数据,例如它的顶点和法线。从这里开始,我有几个从 Model 类派生的类,例如 Fence,它包含几个排列成正确结构的立方体。我将所有顶点和法线存储在堆中,并且需要一种释放内存的方法。然而,当试图释放 Primitive 的构造函数中的内存时,我遇到了一个错误。

我认为这是因为在使用 GLUT 时,模型是在 glutMainLoop() 之外定义的,因此在程序完成使用它们之前它们就超出了范围。有没有更有效的方法来管理 OpenGL 中顶点数组的内存?或者有没有解决这个问题的方法?

4

1 回答 1

2

不要为您的模型使用客户端缓冲区,而是使用服务器端缓冲区。这些是使用绑定的glGenBuffer glBindBuffer and glBufferData。这些 API 将您的缓冲区上传到服务器内存中,上传后您可以立即释放数据。

较新版本的 OpenGL 具有顶点数组对象 (VAO),它们也可能对您有所帮助。

于 2012-11-15T16:25:52.010 回答