2010-09-04 121 views
8

glTexParamter是否对全局纹理或仅对当前绑定的纹理起作用。OpenGL中glTexParameter的范围是什么?

例如,如果我把这个在纹理加载:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

而这在其他的纹理加载:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 

当我绑定在第纹理将它只需使用的最后一个值我设置了(GL_CLAMP),还是使用纹理绑定时最初设置的值?

回答

6

OpenGL FAQ


21.070如何纹理对象工作?

纹理对象存储纹理贴图及其关联的纹理参数状态。它们允许在一次调用glBindTexture()的情况下在纹理之间切换。

(...)

以下功能影响和存储状态纹理对象:glTexImage *(),glTexSubImage *(),glCopyTexImage *(),glCopyTexSubImage *(),glTexParameter *() ,和glPrioritizeTextures()。由于用于构建mipmap金字塔的GLU例程最终会调用glTexImage *(),因此它们也会影响纹理对象状态。通常不在此列表中的是glTexEnv *()和glTexGen *();它们不会在纹理对象中存储状态。


ergo,glTexParameter *只影响绑定纹理。

+1

非常酷,这正是我所希望的,否则我将不得不做一堆状态更改,每次我绑定纹理。 – 2010-09-04 21:01:09