glVertexPointer()什么时候复制数据?

Sea*_*ean 8 opengl

在调用时glVertexPointer()(以及其他相关函数)使用堆栈上的顶点数组是否安全?当OpenGL实际上从传入的结构中复制数据时,我不清楚.

如果不安全,那么你怎么知道什么时候可以安全地销毁/重用你传递给的结构glVertexPointer()

(不使用VBO)

gen*_*ult 6

在顶点数组的情况下,指针将在执行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);
}
Run Code Online (Sandbox Code Playgroud)