我找到了解法为什么需要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。
答案 0 :(得分:27)
如果我想象GL_TEXTURE_2D是挂在墙上的图片框架,而textureId就是真实图片,
实际上是一个很好的类比:)
那么,GL_TEXTURE0和glActiveTexture是什么?
考虑一个有多个相框的墙,第一帧标记为GL_TEXTURE0,第二帧标记为GL_TEXTURE1,等等。
答案 1 :(得分:17)
OpenGL在某个时刻引入了多重纹理(基本上在一个几何传递中使用多个纹理);为了使旧代码保持工作,他们不能只为所有函数添加额外的参数。这就是你必须明确指定要处理的纹理单元的原因。