我正在使用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。
当我用QT包装我的原生OpenGL绘图代码时,这种情况开始发生了:
painter->beginNativePainting();
...
painter->endNativePainting();
PS:多个1是来自多个绘制调用,而不是来自循环。
答案 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);