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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应该是每个纹理单元应用glEnable(GL_TEXTURE_2D)相关的知识,希望对你有一定的参考价值。

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

我希望能找到一些清晰度。

答案

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

在3.8.16节:纹理应用程序中

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

另一答案

这是每个纹理单位。

从GL1.5规范,3.8.15:

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

另一答案

如果你在OpenGL中使用GLSL着色器,那么调用glEnable(GL_TEXTURE)就没有影响。

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

以上是关于应该是每个纹理单元应用glEnable(GL_TEXTURE_2D)的主要内容,如果未能解决你的问题,请参考以下文章

Opengl:地球纹理

OpenGL 纹理无法正常工作

应用纹理贴图

OpenGL:使用多个纹理渲染到 FBO

Torus 的纹理未正确应用

OpenGL生成的纹理总是黑色的?