【问题标题】:OpenGL invalid framebuffer operation after glClear(GL_COLOR_BUFFER_BIT);glClear(GL_COLOR_BUFFER_BIT) 后的 OpenGL 无效帧缓冲操作;
【发布时间】:2012-06-20 19:39:29
【问题描述】:

每次调用glClear(GL_COLOR_BUFFER_BIT); 后,我都会收到 OpenGL 错误“帧缓冲区操作无效”。

调用似乎工作正常,似乎没有任何问题。我首先在::paintGL() 方法中调用glClear(GL_COLOR_BUFFER_BIT);

嗯?我应该忽略这个错误吗?

【问题讨论】:

  • @cbamber85:没有,但我刚刚输入了一个glClearColor(0,0,0,0) 看看是否有什么不同,另一个还在。
  • 该错误很可能是由代码未检查的先前 OpenGL 调用引发的。验证所有 OpenGL 操作是否受到错误检查的保护。
  • @StefanHanke:对glClear() 的调用前后都有错误检查代码。之前不直接设置错误,之后直接设置。显然,罪魁祸首是 glClear() 电话。
  • 代码是否使用 FBO 进行某些渲染?
  • @StefanHanke:现在,不,这只是一个绘制一些 GL_QUADS 的简单程序。

标签: qt opengl error-handling osx-lion framebuffer


【解决方案1】:

我在 osx 上使用 NSOpenGLView 和 CVDisplayLink 来触发渲染回调时遇到了这个问题。

请务必等待 NSOpenGLView 完全显示,然后再开始渲染,即:

-(void)viewDidAppear {
    [super viewDidAppear];

    CVDisplayLinkStart(_displayLink);
}

在 viewDidLoad 中这样做还为时过早。

【讨论】:

    【解决方案2】:

    我的最佳猜测是您的帧缓冲区不完整,在不完整的帧缓冲区上调用 glClear 会引发错误。

    使用glCheckFramebufferStatus 检查帧缓冲区的状态并确保它返回GL_FRAMEBUFFER_COMPLETE

    【讨论】:

    • 我得到了与原始海报相同的错误,并且我验证了我的帧缓冲区完整的。我在 iPhone 上运行 OpenGL-ES3 并且正在清除的纹理是 sRGB 纹理 - 当将其更改为正常的“rgb”纹理时,glClear 上的“无效帧缓冲区操作”错误停止。根据 OP 提供的信息,我无法判断在这种情况下这是否相同,但无论哪种方式,这都可能为遇到此问题的其他人提供提示。
    • 更新:在我的情况下,srgb8 不被支持为“ColorRenderable”(使用 GL_SRGB8_ALPHA8 作为替代作品)。正如詹姆斯所说,glCheckFrameBufferStatus 应该返回了一个错误,但它没有,这意味着我正在使用的openGL实现中有一个错误(osx上xcode 7.3中的OpenGL-ES3)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多