尽管有效的 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。
所以我的问题是:
glGenTextures()
除了根本没有 OpenGL 上下文外,常见的故障情况是什么
- OpenGL 上下文是否无效或混乱,在这种情况下
- 如何检查我的 OpenGL 上下文是否有效?
编辑:因为我坚信这与我的机器没有合适的 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()
.
我在调用 glGenTextures
时遇到 GL_INVALID_OPERATION
错误,我不知道是什么原因造成的。
我正在使用 QtOpenGLWidget 检索上下文,它在我调用 glGenTextures()
时看起来有效(至少我有一个,因为 glGetString(GL_VERSION)
和 glxGetCurrentContext()
都 return 不是垃圾的东西)
错误代码是从 QOpenGLWidget::resizeGL()
方法调用的。在 QOpenGLWidget::initializeGL()
中,我成功编译了一些着色器程序,并将数据创建/上传到 VAO/VBO。
所以我的问题是:
glGenTextures()
除了根本没有 OpenGL 上下文外,常见的故障情况是什么- OpenGL 上下文是否无效或混乱,在这种情况下
- 如何检查我的 OpenGL 上下文是否有效?
编辑:因为我坚信这与我的机器没有合适的 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()
.