尽管 OpenGL 上下文有效,glGenTextures 仍给出 GL_INVALID_OPERATION
Posted
技术标签:
【中文标题】尽管 OpenGL 上下文有效,glGenTextures 仍给出 GL_INVALID_OPERATION【英文标题】:glGenTextures gives GL_INVALID_OPERATION despite valid OpenGL context 【发布时间】:2016-10-20 13:47:11 【问题描述】:我在调用glGenTextures
时收到GL_INVALID_OPERATION
错误,我不知道是什么原因造成的。
我正在使用 QtOpenGLWidget 来检索上下文,并且在我调用 glGenTextures()
时它看起来是有效的(至少我有一个,因为 glGetString(GL_VERSION)
和 glxGetCurrentContext()
都返回了一些不是废话的东西)
错误代码是从QOpenGLWidget::resizeGL()
方法调用的。在QOpenGLWidget::initializeGL()
中,我成功编译了一些着色器程序,并创建/上传数据到 VAO/VBO。
所以我的问题是:
除了根本没有 OpenGL 上下文之外,glGenTextures()
的常见故障案例有哪些
OpenGL 上下文是否无效或混乱?在这种情况下
如何检查我的 OpenGL 上下文是否有效?
编辑:因为我坚信这与我的机器没有合适的 GPU 的事实有关,here is the return of glxinfo。
【问题讨论】:
您需要发布您的代码。 ***.com/help/mcve 【参考方案1】:我不认为是 glGenTextures()
调用导致了错误。此调用只能抛出 GL_INVALID_ENUM 和 GL_INVALID_VALUE。很可能其他一些调用是错误的,新纹理的bind()
是无效调用。
尝试使用glGetError()
定位您的违规电话。
您可以在此处查看有关 gl 调用可能失败的文档: https://www.opengl.org/sdk/docs/man4/html/glCreateTextures.xhtml
【讨论】:
【参考方案2】:好的,找到问题了。似乎着色器没有正确编译(硬编码着色器未检查正确编译,#version 不正确),这会扰乱下一个 OpenGL 错误检查,即glGenTextures()
。
【讨论】:
以上是关于尽管 OpenGL 上下文有效,glGenTextures 仍给出 GL_INVALID_OPERATION的主要内容,如果未能解决你的问题,请参考以下文章
带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?