glActiveTexture()抛出GL_INVALID_ENUM

时间:2014-04-17 09:03:55

标签: opengl

该行

glActiveTexture(GL_TEXTURE0+32);

抛出GL_INVALID_ENUM(因为我发现正在运行glGetError()),而

glActiveTexture(GL_TEXTURE0+31);

运行正常。

根据the documentation

  

"如果纹理不是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

2 个答案:

答案 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。