Opengl glVertexPointer()何时复制数据?
调用Opengl glVertexPointer()何时复制数据?,opengl,Opengl,调用glVertexPointer()(以及其他相关函数)时,使用堆栈上的顶点数组是否安全?我不清楚OpenGL何时从传入的结构中复制数据 如果不安全,那么如何知道何时可以安全地销毁/重用传递给glvertexpinter()的结构 (不使用VBOs)在顶点数组的情况下,指针将在执行glDraweElements()和friends期间解除引用,假设GL\u vertex\u数组已被glEnableClientState()ed 只要glpaurements()返回,OpenGL将拥有它所需的所
glVertexPointer()
(以及其他相关函数)时,使用堆栈上的顶点数组是否安全?我不清楚OpenGL何时从传入的结构中复制数据
如果不安全,那么如何知道何时可以安全地销毁/重用传递给glvertexpinter()
的结构
(不使用VBOs)在顶点数组的情况下,指针将在执行
glDraweElements()
和friends期间解除引用,假设GL\u vertex\u数组
已被glEnableClientState()
ed
只要glpaurements()
返回,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);
}
void draw()
{
向量顶点;
垂直推回(0);
垂直推回(0);
垂直推回(0);
垂直推回(10);
垂直推回(0);
垂直推回(0);
垂直推回(10);
垂直推回(10);
垂直推回(0);
glEnableClientState(GL_顶点_数组);
glVertexPointer(3,GLU浮点,0,&verts[0]);
gldrawArray(GL_三角形,0,3);
glDisableClientState(GL_顶点_数组);
}
glVertexPointer从不复制数据,它只设置一个指针,当您调用glDrawArrays和GLDRAWEREMENTS时,该指针将被读取并传输到GPU,在这些函数返回后,数据可以安全释放。要获得正确答案,如果您使用VBOs,则应添加指针。错误!可以在glBufferData之后释放数据,而不是在发出draw命令之后!不要误导别人。@lukasz1985问题提到他没有使用VBOs,所以你的评论不适用。