目前关注glUnmapBuffer,根据一些文档,它返回GLboolean以指示成功(GL_TRUE)或失败(GL_FALSE)。据推测,如果失败则设置GL错误。
我的问题是在什么情况下你需要检查它是否在发布版本中返回GL_TRUE,假设你在调试版本中的每个OpenGL调用之后检查glGetError?
或者更确切地说,当其他OpenGL函数没有时,为什么这个函数需要返回bool成功/失败?我在这里寻找组织原则,即它有时可以在没有设置gl错误的情况下返回GL_FALSE吗?
编辑:
好的,我找到了答案。不知道是否要放弃它,因为它很有趣。 On this page:“由于它的低级性质,这些保护必须是 轻松。因此,有可能在缓冲期间 映射,发生某种腐败。如果发生这种情况,请致电 glUnmapBuffer将返回GL_FALSE。那时,内容 有问题的缓冲区被认为是未定义的。它可能有你的 数据,或者它可能有随机垃圾。“
因此,当我指定Windows 7或更高版本时,我不需要考虑它(我认为)。具有讽刺意味的是,我将Direct 3D转换为OpenGL的原因之一正是这一点(使用Direct 3D 9.0)。
答案 0 :(得分:3)
因为it's not a regular OpenGL error:
(...)由于系统特定原因会影响图形内存的可用性,例如屏幕模式更改,这可能会发生。在这种情况下,返回GL_FALSE并且未定义数据存储内容。应用程序必须检测此罕见情况并重新初始化数据存储。
毫无疑问,我们引入了这种特殊机制,将此类案例与glGetError
捕获的典型用户交互错误分开。