【问题标题】:Should glEnable(GL_TEXTURE_2D) be applied per texture unit是否应该为每个纹理单元应用 glEnable(GL_TEXTURE_2D)
【发布时间】:2010-10-28 08:37:55
【问题描述】:

在 OpenGL 中,我一直认为glEnable(GL_TEXTURE_1D)glEnable(GL_TEXTURE_2D) 和/或glEnable(GL_TEXTURE_3D)(以及相应的glDisable)是每个纹理单元的参数。

最近我试图确认这一点,但没有找到任何明确的文件来确认关于这个问题的任何一种方式。

简单地说,在代码中,我应该这样做

glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
... bind etc ... 

glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
... bind etc ...

或者这个

glEnable(GL_TEXTURE_2D);

glActiveTexture(GL_TEXTURE0);
... bind etc ...

glActiveTexture(GL_TEXTURE1);
.... bind etc ...

我希望找到一些清晰的信息。

【问题讨论】:

    标签: opengl


    【解决方案1】:

    确实是每个纹理单元。我发现最近明确提到这一点的文档是 Open GL 规范 2.1(2006 年更新)here

    在第 3.8.16 节中:纹理应用

    可能在新规范中的某个地方提到过,但它们进行了重整。您可以在 opengl org 网站上查看所有 Open GL 版本规范(我想发布一个链接,但似乎不能发布多个)。

    【讨论】:

    • 嗯,实际上,它不会出现在最新的核心版本中,因为固定功能已被弃用,然后被删除,而启用控制着固定功能状态。它对着色器没有任何影响。
    • @Bahbar:您的意思是 GLSL 着色器及其注释可以控制纹理单元和采样器的状态,因此不需要例如显式 glEnable(GL_TEXTURE2D)?
    【解决方案2】:

    每个纹理单元。

    来自 GL1.5 规范,3.8.15:

    启用并绑定每个纹理单元 独立于纹理对象 其他纹理单元

    【讨论】:

      【解决方案3】:

      如果您在 OpenGL 中使用 GLSL 着色器,则调用 glEnable(GL_TEXTURE) 没有影响。

      此外,如果您打算继续使用 OpenGL 3.x 核心配置文件,请记住 glEnable(GL_TEXTURE) 已弃用。

      【讨论】:

      • glEnable(GL_TEXTURE_2D) 在我的代码中仍然有效,尽管只有着色器代码。似乎对 glBindTexture 的调用会改变行为...这将是 OpenGL 3.2 核心配置文件。
      猜你喜欢
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多