В случае массива вершин указатель будет разыменован во время выполнения glDrawElements()
и друзей, предполагая, что GL_VERTEX_ARRAY
было glEnableClientState()
ed.
Как только 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);
}