gpt4 book ai didi

opengl - 什么时候应该调用 glGetError?

转载 作者:行者123 更新时间:2023-12-03 14:41:08 27 4
gpt4 key购买 nike

glLoadIdentity

GL_INVALID_OPERATION is generated if glLoadIdentity is executed between the execution of glBegin and the corresponding execution of glEnd.



但是 GL_INVALID_OPERATIONglGetError 返回的标志.

我的问题是,我们什么时候应该调用 glGetError (为了知道我们是否以正确的顺序调用 opengl)?

最佳答案

我不确定您的问题是关于何时可以在 glBegin/End 内部调用 glGetError 还是关于 glGetError 使用的更一般性问题。所以我会一一回答。

在 glBegin 和 glEnd 之间可以做的事情非常有限。这是故意的,因为您将 GL 置于非常特定的模式 - 在 Draw 的中间。因此,任何与每个顶点属性没有直接关系的东西都是无效的。甚至 glGetError 在该上下文中也是无效的。尝试将 glBegin+glEnd 之间的所有 GL 调用视为对 GL 的单个 Draw 调用,这有助于更接近 GL 的实际作用。

现在,如果您坚持只调用属性方法(glNormal、glTexCoord、glColor、glSecondaryColor、glIndex、glMultiTexCoord、glVertexAttrib、glVertex 和其他一些方法)的简单规则,则在 Begin/End 对中,您永远不会真正触发 GL 错误)。其他任何事情都会引发错误。 (呃……好吧,glMaterial 有点异常(exception)。它可以工作,但不鼓励使用它)

如果您的问题是在 Begin/End 对内触发错误时何时可以调用 glGetError,ChrisF 在评论中回答:在 glEnd 调用之后。

现在,从更广泛的意义上说,只将 glGetError 用作调试工具。我个人的偏见有两个:

  • 每帧检查一次 glGetError 以确保没有错误
  • 使用可以检查 GL 错误代码的宏包装大多数 GL 调用,并且仅在每帧检查失败时打开它。

  • 当然,由于可以在 Begin/End 对之外调用属性方法,因此要正确使用它们有点棘手。但在实践中,这些方法无论如何都不会失败,所以我不会费心对它们进行宏观检查。

    花絮:GL API 最初的设计目的是让客户端实现实际上不知道调用站点是否有错误。例如。如果 GL 实际上是在远程机器上实现的(就像在 SGI 时代),那么可以简单地将目标不是 GL_TEXTURE_ENV 的对 glTexEnv 的调用添加到命令缓冲区,并且此时不会记录任何错误。

    如果您随后调用 glGetError,则客户端必须将命令缓冲区刷新到 GL 服务器,等待缓冲的命令被处理,取回错误代码,并将适当的错误代码返回给应用程序。

    如果这听起来很沉重,那是因为它是。顺便说一下,这就是为什么不是每个调用都返回错误代码的主要原因,以及为什么调用 glGetError 只被认为可以用于调试目的。现在,大多数 GL 实现都在同一个过程中处理所有状态管理,所以正如我所说,对于大多数用户来说,这真的很琐碎。

    最后,每当我谈论开始/结束时,我觉得我需要说你应该考虑根本不使用它。这是使用 GL 绘图的最差表现方式。

    关于opengl - 什么时候应该调用 glGetError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1963325/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com