glUnmapBuffer(GL_ARRAY_BUFFER) 与 glBindBuffer(GL_ARRAY_BUFFER,0)
Posted
技术标签:
【中文标题】glUnmapBuffer(GL_ARRAY_BUFFER) 与 glBindBuffer(GL_ARRAY_BUFFER,0)【英文标题】:glUnmapBuffer(GL_ARRAY_BUFFER) vs glBindBuffer(GL_ARRAY_BUFFER,0) 【发布时间】:2014-08-24 20:58:31 【问题描述】:以上两者之间是否有区别,因为它们似乎都具有相同的效果,我的假设是 un-map 缓冲区方法更适合于 un-map,而不是将缓冲区绑定到 0 到 un-map
【问题讨论】:
【参考方案1】:上面的有没有区别,因为它们看起来都具有相同的效果,
它们之间不仅有一些区别,它们做的事情也完全不同。
glBindBuffer 取消/选择以下 OpenGL 操作引用的缓冲区对象。
glUnmapBuffer 是 glMapBuffer 的补充。 glMapBuffer 将缓冲区映射到主机地址空间,即在映射缓冲区之后,可以通过指针访问其内容。 glUnmapBuffer 释放此映射,即缓冲区内容从主机进程地址空间中消失。
因为这两个功能都是正交的,所以绑定状态对地址空间映射没有影响,而地址空间映射对绑定状态也没有影响。
【讨论】:
【参考方案2】:不,它们没有相同的效果。绑定缓冲区 0 只是将缓冲区与某个绑定目标解除绑定,它不会解除映射。缓冲区映射仍然有效,可以使用。您还可以同时映射多个缓冲区。 glUnmapBuffer()
只是取消映射当前绑定到目标点的缓冲区。
【讨论】:
以上是关于glUnmapBuffer(GL_ARRAY_BUFFER) 与 glBindBuffer(GL_ARRAY_BUFFER,0)的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅解决NDK使用OpenGL ES 3.0 的api报错:error: undefined reference to ‘glUnmapBuffer‘