在OpenGL中glTexParameter的范围是什么?

Jus*_*ers 9 opengl 3d graphics opengl-es

glTexParamter作用于所有纹理全局或仅是当前绑定的纹理.

例如,如果我在纹理加载时调用它:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
Run Code Online (Sandbox Code Playgroud)

这在另一个纹理加载:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
Run Code Online (Sandbox Code Playgroud)

当我绑定第一个纹理时它会使用我设置的最后一个值(GL_CLAMP)还是会使用绑定纹理时最初设置的值?

Kor*_*icz 6

OpenGL FAQ:


21.070纹理对象如何工作?

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

(......)

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


因此,glTexParameter*仅影响绑定纹理.

  • 非常酷,这就是我所希望的,否则每次绑定纹理时我都必须进行一堆状态更改。 (2认同)