0

我的代码完全在显卡 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 x 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 上下文不会改变 - 你的纹理在两者之间是未绑定的

是否还有其他未记录的原因可以返回此类错误?任何想法如何找到问题?

4

2 回答 2

2

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

GL_TEXTURE_2D在通过 分配纹理数据之前,您是否将纹理“名称”(ID)绑定为 a glTexImage2D?您的 GL 驱动程序是否支持非 2 次幂 ( NPOT ) 纹理?

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

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

于 2012-08-30T15:51:33.070 回答
0

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

该问题正在为 GLIntercept 修复。对于 GDI 通用 OpenGL 渲染器,使用不带图像记录的 GLIntercept 应该是安全的。

于 2012-09-07T10:16:55.613 回答