glCheckFramebufferStatus 返回 0 并且 glGetError 中没有错误 [关闭]

Posted

技术标签:

【中文标题】glCheckFramebufferStatus 返回 0 并且 glGetError 中没有错误 [关闭]【英文标题】:glCheckFramebufferStatus returns 0 and no error in glGetError [closed] 【发布时间】:2014-07-10 10:28:16 【问题描述】:

glCheckFramebufferStatus 返回 0,之后 glGetError 没有返回错误。假设这是驱动程序错误是否安全?我似乎在 OpenGL 的文档中找不到任何关于如何处理这种情况的信息。

我正在使用带有 nvidia 专有驱动程序的 Linux (Ubuntu 14.04) 上的 SDL2 编写游戏。

【问题讨论】:

我假设 SDL 错误处理在内部调用 glGetError 并因此将其从您手中夺走。请尝试使用 SDL_GetError() wiki.libsdl.org/SDL_GetError。 但 glCheckFramebufferStatus 是对 OpenGL API 的直接调用。 SDL 如何拦截它? 您尝试过使用 SDL_GetError 吗? 是的。它返回一个空字符串。 【参考方案1】:

如果有人想知道,原来我在没有绑定帧缓冲区时正在运行 glCheckFramebufferStatus。

【讨论】:

【参考方案2】:

检查您是否忘记将上下文设置为当前上下文。这就是我的情况。

【讨论】:

【参考方案3】:

如果目标不是 GL_DRAW_FRAMEBUFFER、GL_READ_FRAMEBUFFER 或 GL_FRAMEBUFFER,则生成 GL_INVALID_ENUM。因此,您可以检查您的目标是否属于其中一种类型。

评论:我从这里得到这个OpenGl.org

“另外,如果发生错误,则返回零。”

并且仅在目标不是 GL_DRAW_FRAMEBUFFER、GL_READ_FRAMEBUFFER 或 GL_FRAMEBUFFER 的情况下。

“生成了 GL_INVALID_ENUM”

所以我猜,发生了错误,但他们不会告诉你确实是哪一个。

【讨论】:

什么应该生成 GL_INVALID_ENUM? glCheckFramebufferStatus 返回 0 并且 glGetError 返回 GL_No_ERROR?你是说 GL_INVALID_ENUM 是 0?

以上是关于glCheckFramebufferStatus 返回 0 并且 glGetError 中没有错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将整数纹理附加到帧缓冲区

OpenGL ES 2.0 Framebuffer 渲染到纹理 iOS:没有显示

对于某些纹理大小,glFramebufferTexture2D 在 iPhone 上失败

将模板渲染缓冲区绑定到opengl中的帧缓冲区