C++ glBindFramebuffer导致一个;无效操作“;使用GL\u DRAW\u帧缓冲区目标时发生GL错误

C++ glBindFramebuffer导致一个;无效操作“;使用GL\u DRAW\u帧缓冲区目标时发生GL错误,c++,opengl,opengl-3,C++,Opengl,Opengl 3,我在GeForce 9800 GTX上使用OpenGL 3.3。3.3的参考页指出,使用glBindFramebuffer的无效操作表示未从glGenFramebuffers返回的帧缓冲区ID。但是,我输出了glGenFramebuffers返回的ID和稍后发送给glBindFramebuffer的ID,它们是相同的 但是,当我将glBindFramebuffer中的目标参数从GL_DRAW_FRAMEBUFFER更改为GL_FRAMEBUFFER时,GL错误消失了。文档上说我应该能够使用GL_

我在GeForce 9800 GTX上使用OpenGL 3.3。3.3的参考页指出,使用glBindFramebuffer的无效操作表示未从glGenFramebuffers返回的帧缓冲区ID。但是,我输出了glGenFramebuffers返回的ID和稍后发送给glBindFramebuffer的ID,它们是相同的

但是,当我将glBindFramebuffer中的目标参数从GL_DRAW_FRAMEBUFFER更改为GL_FRAMEBUFFER时,GL错误消失了。文档上说我应该能够使用GL_DRAW_FRAMEBUFFER。是否存在无法绑定到GL\U DRAW\U帧缓冲区的情况?使用GL_帧缓冲区而不是GL_DRAW_帧缓冲区有什么危害吗?这是一个更大问题的症状吗?

如果
glBindFramebuffer(GL\u-FRAMEBUFFER)
glBindFramebuffer(GL\u-DRAW\u-FRAMEBUFFER)
不起作用时
起作用,并且我们不是在讨论这些函数和枚举的EXT版本(注意缺少“EXT”后缀),那么很可能是您做错了什么。GL_INVALID_OPERATION是当依赖于不同状态的多个参数组合发生冲突时出现的错误。如果它只是一个缺少的枚举,您应该得到GL_INVALID_enum


当然,它也可能是一个驱动程序错误。但是,如果不知道您的代码是什么样子,就无法知道。

该程序是为OpenGL 2.2编写的。如果我使用的是glut,我是否可以假设因为glGetString(GL_版本)告诉我3.3,我使用的上下文是3.3?换言之,程序可能采用EXT版本的帧缓冲区。@Phineas:没有OpenGL 2.2。有2.1和3.2,但不是2.2。