在OpenGL中glActiveTexture和GL_TEXTURE0的功能是什么?

时间:2013-01-09 08:52:52

标签: opengl opengl-es

我找到了解法为什么需要glActiveTexture的方法。我有以下代码:

glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);

如果我想象GL_TEXTURE_2D是挂在墙上的图片框架而textureId是真实图片,glBindTexture是唯一一个将真实图片分配给框架的命令那么,GL_TEXTURE0glActiveTexture是什么?

我的代码可以正常使用吗?

glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);

glActiveTexture(GL_TEXTURE1);
glTexImage2D(GL_TEXTURE_2D, .....)
glTexParameteri(GL_TEXTURE_2D, ...)

我目前正在使用OpenGL2.1。

2 个答案:

答案 0 :(得分:27)

  

如果我想象GL_TEXTURE_2D是挂在墙上的图片框架,而textureId就是真实图片,

实际上是一个很好的类比:)

  

那么,GL_TEXTURE0和glActiveTexture是什么?

考虑一个有多个相框的墙,第一帧标记为GL_TEXTURE0,第二帧标记为GL_TEXTURE1,等等。

答案 1 :(得分:17)

OpenGL在某个时刻引入了多重纹理(基本上在一个几何传递中使用多个纹理);为了使旧代码保持工作,他们不能只为所有函数添加额外的参数。这就是你必须明确指定要处理的纹理单元的原因。