我可以在调用 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 调用?