我的代码完全在显卡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上下文不会改变 - 你的纹理在中间不受约束
还有其他一些无证的原因可以归还这样的错误吗?任何想法如何找到问题?
答案 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渲染器应该是安全的。