我创建了一个VBO(顶点缓冲对象)和VAO(顶点数组对象)并执行了以下操作:
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(...);
glVertexAttribPointer(...);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
Run Code Online (Sandbox Code Playgroud)
我可以删除vbo之后我做了这个,然后绘制vao假设一切都井然有序吗?
我知道缓冲区绑定到vao所以我假设我可以.
问题是,如果我删除计算机上的缓冲区(英特尔图形),它工作得很好(一切都正确显示),但在我的朋友计算机(AMD)上没有任何显示.
可能是什么问题?
(顺便说一句,如果我不删除缓冲区,程序在我的计算机和我朋友的工作上都可以)
是的,根据OpenGL 4.5,取消绑定VAO后删除它是合法的.
2.6.1.2删除名称和删除对象
如果某个对象在GL上下文当前正在使用时被删除,则其名称将立即标记为未使用,并且某些类型的对象将自动从当前上下文中的绑定点解除绑定,如5.1.2节所述. 但是,实际的基础对象在不再使用之前不会被删除. 这种情况将在5.1.3节中详细讨论.
5.1.2删除对象的自动解除绑定
删除缓冲区,纹理或渲染缓冲区对象时,它将从当前上下文中绑定的任何绑定点解除绑定,并与绑定到当前上下文的容器对象的任何附件分离,如针对DeleteBuffers,DeleteTextures所述和DeleteRenderbuffers.[...] 未绑定容器对象的附件(例如删除附加到未绑定到上下文的顶点数组对象的缓冲区)不受影响,并继续充当已删除对象的引用,如下所述部分.
5.1.3删除的对象和对象名称生命周期
删除缓冲区,纹理,采样器,渲染缓冲区,查询或同步对象时,其名称将立即变为无效(例如,标记为未使用),但在不再使用基础 对象之前不会删除它.
如果满足以下任何条件,则使用缓冲区,纹理,采样器或渲染缓冲区对象:
- 该对象附加到任何容器对象
- [...]
所以要么它是一个AMD驱动程序错误,要么情况不像你描述的那样.
| 归档时间: |
|
| 查看次数: |
1380 次 |
| 最近记录: |