尽管有效的 OpenGL 上下文,glGenTextures 给出 GL_INVALID_OPERATION

glGenTextures gives GL_INVALID_OPERATION despite valid OpenGL context

我在调用 glGenTextures 时遇到 GL_INVALID_OPERATION 错误,我不知道是什么原因造成的。

我正在使用 QtOpenGLWidget 检索上下文,它在我调用 glGenTextures() 时看起来有效(至少我有一个,因为 glGetString(GL_VERSION)glxGetCurrentContext() 都 return 不是垃圾的东西)

错误代码是从 QOpenGLWidget::resizeGL() 方法调用的。在 QOpenGLWidget::initializeGL() 中,我成功编译了一些着色器程序,并将数据创建/上传到 VAO/VBO。

所以我的问题是:

编辑:因为我坚信这与我的机器没有合适的 GPU 这一事实有关,here is the return of glxinfo

我不认为是 glGenTextures() 调用导致了错误。此调用只能抛出 GL_INVALID_ENUM 和 GL_INVALID_VALUE。很可能其他一些调用是错误的,新纹理的 bind() 是无效调用。

尝试使用 glGetError() 本地化您的违规电话。

您可以在此处查看 gl 调用可能失败的文档: https://www.opengl.org/sdk/docs/man4/html/glCreateTextures.xhtml

好的,找到问题了。看起来着色器没有正确编译(硬编码着色器未检查是否正确编译,#version 不正确),这搞乱了下一个 OpenGL 错误检查,即 glGenTextures().