cod*_*123 3 opengl memory-management vertex-array
伪代码:
void draw()
{
Vertex* vertices = scene.GetVertexArray();
glEnableClientState(...);
glVertexPointer(..., vertices);
glDrawArrays(...);
glDisableClientState(...);
delete vertices;
}
Run Code Online (Sandbox Code Playgroud)
我不使用VBO,因为我想支持较旧的OpenGL实现.
在调用glDrawArrays之后,我想:
delete vertices;")但是,GL可以自由地异步执行glDrawArrays,并且在完成之前解除分配或修改我的数组是不安全的.
我可以做一个glFinish来确保,但它会减慢应用程序的速度.
那么在什么时候我可以自由地解除分配/修改我的顶点数组?
OpenGL保证,一旦实际访问某些内存的任何函数返回,您可以更改或取消分配它的内容.这些功能是:
重要的是要知道gl {Normal,Color,TexCoord,Attrib,Vertex}指针只是设置指针而不创建副本.但是,glDrawElements和glDrawArrays调用会对数据进行排序(取决于驱动程序,不会立即生成物理副本,而是针对写入时复制方案调整内存管理 - 以防缓冲区未被修改或者由用户程序解除分配,这节省了关键的带宽和CPU周期).
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |