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