OpenGL:顶点数组所需的生命周期

时间:2011-09-08 02:02:10

标签: ios opengl-es

OpenGL新手问题:如果我做这样的事情:

GLfloat vertices[] = { .... };
glVertexPointer(3, GL_FLOAT, 0, vertices);
... set other stuff ...
glDrawArrays(...);

'vertices'数组所需的生命周期是多少? (或者换句话说,OpenGL会获取相关部分的副本以及在什么时候?)例如,数组是否可以隐藏在堆栈中,或者是否需要在glDrawArrays之后存在( )被称为?

[对于它的价值,我专门为iOS编程,目前使用在OpenGL项目中创建的drawFrame方法中的代码,默认情况下在XCode中设置。]

2 个答案:

答案 0 :(得分:2)

你的数组必须存活到glDrawArrays之后,它可以在之后销毁,并且如此暗示,它可以驻留在堆栈上。

答案 1 :(得分:1)

每次调用glDrawArrays/Elements时都会复制顶点数组的内容,因此此时必须仍然存在(直到你不再调用glDrawArrays/Elements或更改顶点数组为止通过致电gl...Pointer)。

要在GPU上实际存储顶点(和其他)数据并让驱动程序管理其内存(以及不需要在每次绘制调用时传输数据的性能提升),您可以使用vertex buffer objects。一旦将数据复制到这样的VBO中,它就驻留在GPU内存中(或者驱动程序认为它最适合的地方)并且您实际上不再需要CPU副本了。但这些是简化的陈述,请参阅维也纳各组织的材料以获取更多信息。