OpenGL:关闭多个纹理单元

时间:2011-04-18 15:48:08

标签: opengl textures multitexturing

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

        glActiveTexture(GL_TEXTURE0 + index);
        glBindTexture(GL_TEXTURE_2D,
               ((MaterialSampler2D)specular).texture.getTOB());
        shader.setTexture2(index);

是否有类似glDeactivateTexture的东西?

2 个答案:

答案 0 :(得分:10)

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

所以回答你的问题:使用i选择纹理单元glActiveTexture(GL_TEXTURE0+i),然后使用glDisable(GL_TEXTURE_2D)将其停用。

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

答案 1 :(得分:1)