在调用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/

10-10 10:43