是否应该对每个纹理单元应用glEnable(GL_TEXTURE_2D)?

11
在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 ...

我希望能够找到一些明确的答案。

3个回答

8

每个纹理单元都是独立于其他纹理单元启用和绑定到纹理对象的。

引自GL1.5规范3.8.15:

每个纹理单元都是独立于其他纹理单元启用和绑定到纹理对象的。


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

在第3.8.16节:纹理应用程序

它可能在新规范的某个地方提到,但它们被大量重新组织。您可以在opengl.org网站上查看所有Open GL版本规范(我想发布链接,但似乎无法发布多个链接)。


7
实际上,它不会出现在最新的核心修订版中,因为固定功能已被弃用并删除,而启用选项控制的是固定功能状态。它对着色器没有任何影响。 - Bahbar
@Bahbar:你的意思是GLSL着色器及其注释可以控制纹理单元和采样器的状态,因此例如不需要显式启用glEnable(GL_TEXTURE2D)吗? - Montdidier

3
如果在OpenGL中使用GLSL着色器,则调用glEnable(GL_TEXTURE)不会起作用。
此外,如果您打算转向OpenGL 3.x核心配置文件,请记住glEnable(GL_TEXTURE)已被弃用。

尽管只有着色器代码,但glEnable(GL_TEXTURE_2D)在我的代码中仍然有效。看起来调用glBindTexture会改变行为... 这将是OpenGL 3.2核心配置文件。 - John Leidegren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接