我们为什么要把glGetError放在循环中?

时间:2016-04-21 07:47:06

标签: opengl

当我搜索glGetError时,我发现以下内容(来自OpenGL)

  

要允许分布式实现,可能会有几个错误标志。   如果任何单个错误标志记录了错误,则返回该标志的值,并在调用glGetError时将该标志重置为GL_NO_ERROR。
  如果多个标志记录了错误,glGetError将返回并清除任意错误标志值。因此,如果要重置所有错误标志,则应始终在循环中调用glGetError,直到它返回GL_NO_ERROR。

Q1:分布式实施错误标志的定义是什么?总共有多少错误标志?

Q2:任意在这里意味着什么?

问题3:“应始终在循环中调用glGetError”意味着在分布式实现的情况下这是强制性的,但如果不是,那么我们不需要将glGetError放在循环中,对?

其他资源,例如wrap a macro around glGetErrorglGetError example in the superbible,都使用循环。

1 个答案:

答案 0 :(得分:4)

  

Q1:分布式实现的定义和错误标志是什么?

分布式实现是指OpenGL实现驻留在一台计算机上,程序使OpenGL调用另一台计算机。这甚至不是一个模糊的,异国情调,但与X11相当普遍。假设您可以使用SSH连接到example.com,并且有一个OpenGL程序,比如说glxgears。然后,您可以在glxgears上执行example.com,但可以通过GLX传输将OpenGL命令传输到本地X11服务器。

ssh -X example.com glxgears
  

...总共有多少错误标志?

OpenGL规范中定义并列在glGetError引用中的所有错误标记。

  

Q2:这里任意意味着什么?

字典定义的含义。如果设置了多个错误标志,则OpenGL规范不会强制执行报告这些错误标志的特定顺序。

  

问题3:“应始终在循环中调用glGetError”意味着在分布式实现的情况下这是强制性的,但如果没有,那么我们不需要将glGetError放在循环中,对吗?

始终在循环中调用glGetError,因为您可能在不知情的情况下最终处于分布式状态。有GLX和间接渲染,但是OpenGL可以以任何其他方式分发,比如VirtualGL,或其他你不知道情况的东西。