伪代码:
void draw()
{
Vertex* vertices = scene.GetVertexArray();
glEnableClientState(...);
glVertexPointer(..., vertices);
glDrawArrays(...);
glDisableClientState(...);
delete vertices;
}
我不使用VBO,因为我想支持较旧的OpenGL实现。
在调用glDrawArrays之后,我想:
delete vertices;
”)但是,GL可以自由地异步执行glDrawArrays,并且在完成之前释放或修改我的数组是不安全的。
我可以做一个glFinish来确保,但它会减慢应用程序。
那么在什么时候我可以自由地释放/修改我的顶点数组?
答案 0 :(得分:6)
OpenGL保证,一旦实际访问某些内存的任何函数返回,您就可以更改或取消分配它的内容。这些功能是:
重要的是要知道gl {Normal,Color,TexCoord,Attrib,Vertex}指针只是设置指针而不创建副本。但是,glDrawElements和glDrawArrays调用会产生一系列数据的副本(取决于驱动程序,不会立即生成物理副本,而是针对写入时复制方案调整内存管理 - 以防缓冲区未被修改)或者由用户程序解除分配,这可以节省关键的带宽和CPU周期。)