5

问题 1

在某个 VAO 下创建的顶点缓冲区对象是否会在该 VAO 被删除后被删除?

一个例子:

glGenBuffers(1, &bufferObject);
glGenVertexArrays(1, &VAO);

glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, bufferObject);
glBufferData(GL_ARRAY_BUFFER, sizeof(someVertices), someVertices, 
             GL_STATIC_DRAW);
glEnableVertexAttribArray(positionAttrib);
glVertexAttribPointer(positionAttrib, 3, GL_FLOAT, GL_FALSE, 0, NULL);

以后调用glDeleteVertexArrays(1, &VAO);时,也会bufferObject被删除吗?

我问的原因是我在网上看到了一些没有删除那些缓冲区对象的例子。

问题2

我可以为缓冲区对象分配的最大内存量是多少?当然,它必须取决于系统,但我似乎无法找到它的估计值。当显存不够大时会发生什么?我怎么会知道?

4

2 回答 2

15
于 2012-11-12T11:04:36.490 回答
8

答案 1

这取决于。如果您之前调用glDeleteBuffers过,它会在您删除 VAO 时被删除。如果没有,它不会。VAO 持有对 VBO 的引用,您的应用程序在调用glGenBuffers. 在删除 VBO 之前,需要释放这两个引用。

答案 2

(afaik)无法查询您可以分配的最大金额。但是,根据参考文档,如果无法分配缓冲区,glBufferData则会发出。GL_OUT_OF_MEMORY

于 2012-11-12T11:03:54.933 回答