该行
glActiveTexture(GL_TEXTURE0+32);
抛出GL_INVALID_ENUM(因为我发现正在运行glGetError()),而
glActiveTexture(GL_TEXTURE0+31);
运行正常。
"如果纹理不是GL_TEXTUREi之一,则生成GL_INVALID_ENUM,其中i的范围从零到GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS减去1的值。"
但在我的情况下,GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS定义为35661,并根据相同的文档
"纹理单元的数量取决于实现,但必须至少为80。"
我怎么能解决这个问题?
以防万一,GL_TEXTURE0定义为33984,我的OpenGL版本为2.1
答案 0 :(得分:4)
文档有点误导。它们表示由
检索的值glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, ...)
不是令牌本身的价值。
答案 1 :(得分:4)
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
可能被定义为35661
,但这不是您想要的,即枚举的值(与GL_TEXTURE0
相同)定义为33984
)。这些价值观毫无意义。
您可以通过查询glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &texture_units);
来获取数字,这将返回您可以使用的纹理数量。 OpenGL 2.1 hw很可能是32。