线
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
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS可以定义为35661,但这不是您想要的,这就是枚举的值(与GL_TEXTURE0定义为相同33984)。这些值根本没有意义。
您可以通过查询获得数量glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &texture_units);,这将返回您可以使用的纹理数量。在 OpenGL 2.1 hw 上它很可能是 32。