OpenGL:关闭多个纹理单元

itu*_*tun 5 opengl textures multitexturing

如何关闭多个纹理单元,因为它们会影响其他渲染部件.我激活他们:

        glActiveTexture(GL_TEXTURE0 + index);
        glBindTexture(GL_TEXTURE_2D,
               ((MaterialSampler2D)specular).texture.getTOB());
        shader.setTexture2(index);
Run Code Online (Sandbox Code Playgroud)

有没有类似glDeactivateTexture的东西?

ltj*_*jax 10

glActiveTexture不激活纹理单位.它只选择你当前修改的纹理单元(是的,OpenGL的对象状态管理是可怕的).用glEnable(<texture-target>)和激活纹理glDisable(<texture-target>).在你的情况下,目标将是GL_TEXTURE_2D.

因此,要回答你的问题:选择纹理单元i使用glActiveTexture(GL_TEXTURE0+i),然后用禁用它glDisable(GL_TEXTURE_2D).

请注意,对于着色器,所有这些都是多余的 - 您无法访问那里的值.

  • 我使用着色器,我不需要使用glEnable/glDisable(GL_TEXTURE_2D),是吗?我使用它,它对我没有帮助. (2认同)