glGetError()返回1

时间:2013-10-18 20:59:48

标签: c++ qt opengl

我正在使用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是来自多个绘制调用,而不是来自循环。

2 个答案:

答案 0 :(得分:6)

请改为尝试:

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

您的!=已在=之前获得评估。

答案 1 :(得分:3)

我怀疑以下行没有达到你想要的效果:

GLenum err = glGetError() != GL_NO_ERROR

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

这就是为什么总是在你的源代码中花费2个以上字符的好主意:

(GLenum err = glGetError()) != GL_NO_ERROR

其他建议:如果您已使用glewGetErrorString库,请使用glew

std::cerr << glewGetErrorString(err);