GDI通用OpenGL驱动程序 - glBindTexture() - GL_INVALID_ENUM错误

时间:2012-08-30 14:44:16

标签: generics opengl textures gdi

我的代码完全在显卡OpenGL下工作。

然而,当我使用GDI通用OpenGL驱动程序切换到OpenGL仿真时,我得到了非常奇怪的错误:

GL ERROR - 函数glBindTexture(GL_TEXTURE_2D,1)生成错误GL_INVALID_ENUM

glBindTexture()的文档说明只有在目标枚举错误的情况下才能返回GL_INVALID_ENUM。然而,GL_TEXTURE_2D是正确的枚举 - 适用于图形卡OpenGL驱动程序。

我确信: 1)glBindTexture正在生成该错误 - 使用带有错误记录的GLIntercept跟踪器 2)纹理被分配并且具有512×4的大小 3)为纹理分配数据:glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,m_textureImage.width(),m_textureImage.height(),0,GL_BGRA,GL_UNSIGNED_BYTE,m_textureImage.bits()); 4)在为数据分配纹理和实际使用纹理之间的OpenGL上下文不会改变 - 你的纹理在中间不受约束

还有其他一些无证的原因可以归还这样的错误吗?任何想法如何找到问题?

2 个答案:

答案 0 :(得分:2)

glBindTexture(GL_TEXTURE_2D, 1):分配固定的纹理ID (1)是不常见的,而不是从glGenTextures返回的值。也就是说,无效值不应返回GL_INVALID_ENUM

在通过GL_TEXTURE_2D指定纹理数据之前,您是否将纹理'name'(ID)绑定为glTexImage2D?你的GL驱动程序是否支持非2次幂( NPOT )纹理?

最后,您是否在GL状态下启用纹理:glEnable(GL_TEXTURE_2D)?虽然我不相信会产生你提到的错误代码。

我真的不知道。你可能已经完成了我提到的一切!我只是想考虑可能的疏忽。

答案 1 :(得分:0)

这已被确定为GlIntercept图像记录器的问题。记录器正在使用OpenGL 1.1中没有的一些OpenGL 1.2枚举。

GLIntercept正在解决此问题。使用没有图像记录的GLIntercept对于GDI通用OpenGL渲染器应该是安全的。