【问题标题】:glGetError() returns 1glGetError() 返回 1
【发布时间】:2013-10-27 20:18:29
【问题描述】:

我正在使用 QT 4.8.4 并在 QGraphicsScene 背景上绘制 OpenGL。问题是我从 glGetError() 得到无效返回。我的代码sn-p:

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

在应用程序输出中,我得到很多带有 number 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!您能否提供更大的代码示例和您看到的输出?不太清楚你在做什么。
  • 谢谢德里克!由于这个问题已得到正确回答,因此很明显这与上下文无关(删除不必要的细节而不是添加新的细节可能会更好:))。

标签: c++ qt opengl


【解决方案1】:

试试这个:

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

您的!== 之前得到评估。

【讨论】:

  • 限制该循环并相应处理达到的限制的好主意;否则,观察者可能会在看到无穷无尽的 1282 秒(0x502,GL_INVALID_OPERATION。)流一段时间。
【解决方案2】:

我怀疑以下行不能满足您的要求:

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,但是我实现了一个更合理的错误日志,只是这里没有显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
相关资源
最近更新 更多