glGetError() 返回1。

8

我正在使用QT 4.8.4并在QGraphicsScene背景上绘制OpenGL。问题在于我得到了从glGetError()返回的无效信息。我的代码片段:

while (GLenum err = glGetError() != GL_NO_ERROR) {
    std::cerr << err;        
}

在应用程序输出中,我得到了很多带有数字1的行。

从文档中,我看到可能的值包括:

GL_NO_ERROR、GL_INVALID_ENUM、GL_INVALID_VALUE、GL_INVALID_OPERATION、GL_INVALID_FRAMEBUFFER_OPERATION、GL_OUT_OF_MEMORY、GL_STACK_UNDERFLOW、GL_STACK_OVERFLOW,它们分别定义为0、0x0500、0x0501、0x0502、0x0503、0x0504、0x0505、0x0506。

为什么我得到的是数字1而不是正确的错误代码?

当我使用QT封装本地OpenGL绘图代码时,这种情况开始发生。

painter->beginNativePainting();
...
painter->endNativePainting();

PS:多个1是来自多个绘制调用而不是循环。


欢迎来到SO!您能提供更大的代码示例和您所看到的输出吗?目前还不太清楚您在做什么。 - Derek
2
谢谢 Derek!由于这个问题已经得到正确的回答,很明显这与上下文无关(最好删除不必要的细节而不是添加新的 :) )。 - HeavyMight
2个回答

6
尝试使用以下内容替代:
GLenum err;
while ( ( err = glGetError() ) != GL_NO_ERROR) {
    std::cerr << err;        
}

你的!==之前被评估。

限制循环并相应地处理达到限制的情况是个好主意;否则,观察者可能会被拉扯一段时间,看着无尽的1282s(0x502,GL_INVALID_OPERATION)流。 - bvj

3

我怀疑以下代码行不会按照您的意愿执行:

GLenum err = glGetError() != GL_NO_ERROR

该代码首先评估glGetError() != GL_NO_ERROR,然后将其分配给err

这就是为什么在您的源代码中多花2个字符总是一个好主意的原因:

(GLenum err = glGetError()) != GL_NO_ERROR

附加建议:如果你已经在使用glew库,那么可以使用glewGetErrorString函数:

std::cerr << glewGetErrorString(err);

你说得对。我没有使用GLEW,但我已经实现了一个更合理的错误日志,只是这里没有展示出来。 - HeavyMight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接