glCheckFramebufferStatus返回36062

时间:2013-04-05 16:40:22

标签: opengl constants glew

问题: glCheckFramebufferStatus返回的值(36062)与任何记录的Constant不匹配。

我正在尝试创建一个Framebuffer对象然后检查它的状态,但glCheckFramebufferStatus返回的值与任何常量都不匹配。
难道我做错了什么?到目前为止所有其他命令都有效。

代码(BlitzMax):

glGenFramebuffers(1, Varptr gl_Framebuffer)
glGenTextures(1, Varptr gl_FramebufferTex)
glBindTexture(GL_TEXTURE_2D, gl_FramebufferTex)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, vRW, vRH, 0, GL_RGB, GL_UNSIGNED_BYTE, 0)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glBindFramebuffer(GL_FRAMEBUFFER, gl_Framebuffer)
glFramebufferTextureARB(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, gl_FramebufferTex, 0)
glFramebufferTextureARB(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, gl_FramebufferTex, 0)

Local fbo0Status:Int = glCheckFramebufferStatus(gl_Framebuffer)
Select fbo0Status
    Case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
        Print "[FBO0] GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"
    ...
    Default
        Print "[FBO0] GL_I_DONT_KNOW_THIS_FREAKING_VALUE (" + fbo0Status + ")"
EndSelect

2 个答案:

答案 0 :(得分:2)

所以我在跟踪一些错误的FBO演示代码时遇到了这个问题。经过半小时的调试,我发现了问题。

这里的问题是代码

Local fbo0Status:Int = glCheckFramebufferStatus(gl_Framebuffer)

根据OpenGL文档:

http://www.opengl.org/sdk/docs/man3/xhtml/glCheckFramebufferStatus.xml

你不应该传递帧缓冲区ID。相反,你应该传递GL_FRAMEBUFFER。

规范声明在将无效值传递给glCheckFramebufferStatus()时,它应该生成GL_INVALID_ENUM。然而,这似乎是一个驱动程序错误,因为它生成了36062。

答案 1 :(得分:0)

好吧,我可以这样说:0x8CDE(十六进制中的36062)不仅与glCheckFramebufferStatus的任何预期返回值不匹配,而且与 OpenGL 中的任何枚举都不匹配。

所以这显然是一个驱动程序错误。

话虽如此,您的代码是多余的。您不需要在同一个连接点两次上将相同的纹理附加到同一帧缓冲区。绑定到GL_FRAMEBUFFER会将同一FBO同时绑定到READDRAW帧缓冲区。因此,您的两个glFramebufferTexture电话只是多余的。

但这不应该引起问题。