我可以在调用 glDrawArrays 后删除 OpenGL 顶点数组吗?

Posted

技术标签:

【中文标题】我可以在调用 glDrawArrays 后删除 OpenGL 顶点数组吗?【英文标题】:Can I delete OpenGL vertex arrays after calling glDrawArrays? 【发布时间】:2011-01-13 20:18:48 【问题描述】:

我在每次渲染时动态生成顶点数组,然后我想删除这些数组。 glDrawArrays 是否立即将顶点数组复制到服务器?因此在调用glDrawArrays 后删除顶点数组是否安全?

float * vp = GetVertices(); // Regenerated on each render
glVertexPointer(3, GL_FLOAT, 3 * sizeof(float), vp);
glDrawArrays(GL_TRIANGLES, 0, nVertices);
delete[] vp; // Can I do this?

否则,如何确定何时可以安全地删除顶点数组?

【问题讨论】:

删除数组需要语法:delete [] vp; 其中vp 是指向数组第一个元素的指针。 在一个不相关的注释上 - 使用顶点数组需要每次将数据分流到显卡内存。如需更有效的方法,请查看 Vertex Buffer Objects songho.ca/opengl/gl_vbo.html 【参考方案1】:

是的,它会立即被复制,所以一旦你完成了调用,你就可以对数组做任何你喜欢的事情。

另外,正如直接指出的那样,您需要使用delete[] vp 来删除数组。

【讨论】:

【参考方案2】:

可以,调用 glDrawArrays 后可以删除顶点数组。但是opengl不会将顶点数据存储在它的内存中。它只会使用顶点数组并在帧缓冲区上绘制。所以下次如果要绘制相同的顶点,则必须再次将顶点数组提供给glDrawArrays。

【讨论】:

以上是关于我可以在调用 glDrawArrays 后删除 OpenGL 顶点数组吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Opengl ES 中在 FBO 上调用多个 glReadPixels 和 glDrawArrays

OpenGL 3.3 - glDrawArrays 后的无效操作错误 (1282)

我应该使用几个 glDrawArrays() 还是将所有顶点收集到一个大 glDrawArrays 调用?

调用 glDrawArrays() 时的 OpenGL VBO Segfault

调用 glDrawArrays 时出现访问冲突错误

glDrawArrays上的OpenGL Segfaulting