在调用时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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3651 次 |
| 最近记录: |