Gra*_*ton 16 opengl tao-framework
GL_INVALID_OPERATION如果glLoadIdentity在执行glBegin和执行之间执行,则生成glEnd.
但是glGetError会GL_INVALID_OPERATION返回一个标志.
我的问题是,我们什么时候应该打电话glGetError(为了知道我们是否按照正确的顺序调用opengl)?
Bah*_*bar 22
我不确定你的问题是关于什么时候你可以调用glGetError,如果在glBegin/End里面,或者它是否是一般关于glGetError使用的更普遍的问题.所以我会回答两个问题.
你在glBegin和glEnd之间做的事情是非常有限的.这是有目的的,因为你把GL放在一个非常特殊的模式 - 在Draw的中间.因此,任何与每个顶点属性无直接关系的东西都是无效的.即使glGetError在该上下文中也是无效的.尝试并考虑glBegin +在+ glEnd之间的所有GL调用作为对GL的单个Draw调用,这有助于更接近GL实际上做的事情.
现在,你应该从来没有真正拥有,而里面的开始/结束对,如果你坚持简单的规则,只调用属性方法(glNormal,glTexCoord,glColor,glSecondaryColor,glIndex,glMultiTexCoord,glVertexAttrib,glVertex和一对夫妇等引发的GL错误).其他任何东西都会触发错误.(错误......好吧,glMaterial有点例外.它有效,但不鼓励使用它)
如果您的问题是当您在Begin/End对中触发错误时可以调用glGetError,那么ChrisF在注释中回答:在glEnd调用之后.
现在,从更广泛的意义上讲,仅将glGetError用作调试工具.我的个人偏见是双重的:
当然,由于可以在Begin/End对之外调用属性方法,因此将它们设置为正确有点棘手.但实际上,这些方法无论如何都不会失败,所以我不打算对它们进行宏观检查.
琐事的一小部分:GL API最初设计为使客户端实现实际上无法知道呼叫站点是否存在错误.例如,如果GL在一台远程机器(在SGI天等)实现,用于,比方说,glTexEnv打电话与不GL_TEXTURE_ENV的目标可以简单地添加到命令缓冲区,并会在该点记录没有错误.
如果您随后调用glGetError,则客户端必须将命令缓冲区刷新到GL服务器,等待处理缓冲的命令,获取错误代码,并将相应的错误代码返回给应用程序.
如果这听起来很重,那是因为它是.这就是为什么每个调用都没有返回错误代码的主要原因,顺便说一下,为什么调用glGetError只能被认为是可以用于调试目的.目前,大多数GL实现都在同一个流程中处理所有状态管理,正如我所说,对大多数用户来说,这真的是琐事.
最后,每当我谈论开始/结束时,我觉得我需要说你根本不应该使用它.这是使用GL绘制最糟糕的表现方式.
| 归档时间: |
|
| 查看次数: |
15299 次 |
| 最近记录: |