28

我正在寻找一种方法来理解为什么glActiveTexture需要。我有以下代码:

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

如果我想象GL_TEXTURE_2D是挂在墙上的相框并且textureId是真实图片,那么glBindTexture是唯一将真实图片分配给相框的命令,那么GL_TEXTURE0和是什么glActiveTexture

我下面的代码可以正常工作吗?

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

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

我目前正在使用 OpenGL2.1。

4

2 回答 2

34

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

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

那么,GL_TEXTURE0 和 glActiveTexture 是什么?

想一想有多个相框的墙,第一个框架标记为 GL_TEXTURE0,第二个框架标记为 GL_TEXTURE1,依此类推。

于 2013-01-09T09:06:05.360 回答
20

OpenGL 在某个时候引入了多纹理(基本上是在一个几何通道上使用多个纹理);为了让旧代码继续工作,他们不能只为所有函数添加额外的参数。这就是为什么您必须明确指定要处理的纹理单元的原因。

于 2013-01-09T15:00:53.183 回答