在调用glVertexPointer()
(和其他相关函数)时,使用堆栈上的顶点数组是否安全?我不清楚OpenGL何时实际从传入的结构中复制数据。
如果不安全,那您怎么知道什么时候可以安全地销毁/重用传递给glVertexPointer()
的结构呢?
(不使用VBO)
最佳答案
在顶点数组的情况下,假设glDrawElements()
已被GL_VERTEX_ARRAY
编码,则在执行glEnableClientState()
和好友时将取消对指针的引用。glDrawElements()
返回后,OpenGL将拥有所需的所有数据,因此您可以自由使用free()
。
对于VBO,您永远不会传递真正的指针,因此,它并不重要:)
所以这样的事情应该工作:
void draw()
{
vector< float > verts;
verts.push_back( 0 );
verts.push_back( 0 );
verts.push_back( 0 );
verts.push_back( 10 );
verts.push_back( 0 );
verts.push_back( 0 );
verts.push_back( 10 );
verts.push_back( 10 );
verts.push_back( 0 );
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, &verts[0]);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
}
关于opengl - glVertexPointer()何时复制数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6987276/