glActiveTexture() 抛出 GL_INVALID_ENUM

Mat*_*ant 2 opengl

线

glActiveTexture(GL_TEXTURE0+32);
Run Code Online (Sandbox Code Playgroud)

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

glActiveTexture(GL_TEXTURE0+31);
Run Code Online (Sandbox Code Playgroud)

运行良好。

根据文档

“如果纹理不是 GL_TEXTUREi 之一,则生成 GL_INVALID_ENUM,其中 i 的范围从零到 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 的值减去一。”

但在我的情况下 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 被定义为 35661,并且根据相同的文档

“纹理单元的数量取决于实现,但必须至少为 80。”

我怎么能解决这个问题?

以防万一,GL_TEXTURE0 被定义为 33984 而我的 OpenGL 版本是 2.1

Jaa*_*a-c 5

GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS可以定义为35661,但这不是您想要的,这就是枚举的值(与GL_TEXTURE0定义为相同33984)。这些值根本没有意义。

您可以通过查询获得数量glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &texture_units);,这将返回您可以使用的纹理数量。在 OpenGL 2.1 hw 上它很可能是 32。