【问题标题】:OpenGL: Turn off multiple texture unitsOpenGL:关闭多个纹理单元
【发布时间】:2011-04-18 15:48:07
【问题描述】:

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

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

有类似 glDeactivateTexture 的东西吗?

【问题讨论】:

    标签: opengl textures multitexturing


    【解决方案1】:

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

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

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

    【讨论】:

    • 我使用着色器,我不需要使用 glEnable/glDisable(GL_TEXTURE_2D),对吗?我用这个,它对我没有帮助。
    • 没错,除了一些有缺陷的驱动程序有问题(我认为曾经有一个错误影响了 ATI 驱动程序上的这个问题)
    【解决方案2】:

    你的意思是glDisable之类的东西? http://www.opengl.org/sdk/docs/man/xhtml/glEnable.xml

    【讨论】:

    • 你认为什么参数值对我有帮助?
    • 从我的头顶想到 glActiveTexture(GL_TEXTURE0); glDisable(GL_TEXTURE_2D);不确定您是否打算这样做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多