0

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

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

代码(闪电战):

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
4

2 回答 2

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。

于 2013-07-24T03:21:48.087 回答
0

好吧,我可以这样说: 0x8CDE (36062 in hex) 不仅不匹配任何预期的返回值 from glCheckFramebufferStatus,它也不匹配OpenGL 中的任何枚举

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

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

但这不应该引起问题。

于 2013-04-06T01:10:25.423 回答