3

目前查看 glUnmapBuffer ,根据一些文档,它返回 GLboolean 以指示成功(GL_TRUE)或失败(GL_FALSE)。据推测,如果它失败,它会设置 GL 错误。

我的问题是在什么情况下您需要检查它是否在发布版本中返回 GL_TRUE,假设您在调试版本中的每个 OpenGL 调用后检查 glGetError ?

或者更确切地说,当其他 OpenGL 函数不需要时,为什么这个函数需要返回布尔成功/失败?我在这里寻找组织原则,即它有时可以在没有设置 gl 错误的情况下返回 GL_FALSE 吗?

编辑:

好的,我找到了答案。不确定是否要保留它,因为它很有趣。 在此页面上

“由于其低级性质,必须放松这些保护。因此,在映射缓冲区期间,可能会发生某种损坏。如果发生这种情况,调用 glUnmapBuffer 将返回 GL_FALSE。那时点,有问题的缓冲区的内容被认为是未定义的。它可能有你的数据,或者它可能有随机垃圾。

因此,当我指定 Windows 7 或更高版本时,我不需要考虑它(我认为)。具有讽刺意味的是,我从 Direct 3D 切换到 OpenGL 的原因之一正是这个(使用 Direct 3D 9.0)。

4

1 回答 1

3

因为这不是常规的 OpenGL 错误

(...) 这可能是由于影响图形内存可用性的系统特定原因而发生的,例如屏幕模式更改。在这种情况下,将返回 GL_FALSE 并且数据存储内容未定义。应用程序必须检测这种罕见情况并重新初始化数据存储。

毫无疑问,引入了这种特殊机制,以将此类情况与glGetError.

于 2013-10-23T14:46:27.843 回答