绑定的 GL 状态是一个纹理名称每个目标(即 1D/2D/3D/立方体)。所以打电话的时候
glBindTexture(GL_TEXTURE_2D, my2dTex)
glBindTexture(GL_TEXTURE_1D, my1dTex)
GL 会记住这两个设置。
现在,使用哪个 GL 的答案取决于你是否开启了着色器。
如果着色器打开,GL 将使用着色器指定使用的任何内容。 (基于 sampler1d/sampler2d ...)。
如果没有开启着色器,那么它首先取决于调用了哪个 glEnable。
glEnable(GL_TEXTURE_2D)
glEnable(GL_TEXTURE_1D)
如果都启用,则规范中有静态优先级规则(GL 1.5 规范中的 3.8.15 Texture Application)。
Cube > 3D > 2D > 1D
因此,在您的情况下,如果您的两个纹理目标都启用,则将使用 2D 目标。
作为旁注,请注意着色器如何不关心纹理目标是否已启用...
编辑添加:
对于那些真正想要了解细节的人来说,您总是为每个目标 * 每个单元都有一个纹理绑定。名称 0(绑定状态的默认值)对应于一系列纹理对象,每个目标一个。 glBindTexture(GL_TEXTURE_2D, 0) 和 glBindTexture(GL_TEXTURE_1D, 0) 都绑定了一个纹理,但不是同一个......
这是历史记录,指定为匹配 GL 1.0 的行为,其中纹理对象尚不存在。不过,我不确定 GL3.0 中的弃用对此有何影响。