OpenGL中glTexParameter的作用范围是什么?

12

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),还是会使用最初绑定纹理时设置的值?

1个回答

10

来自OpenGL FAQ


21.070 纹理对象如何工作?

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

(...)

以下函数会影响并在纹理对象中存储状态:glTexImage*()、glTexSubImage*()、glCopyTexImage*()、glCopyTexSubImage*()、glTexParameter*()和glPrioritizeTextures()。由于用于构建mipmap金字塔的GLU例程最终会调用glTexImage*(),因此它们也会影响纹理对象状态。值得注意的是,glTexEnv*()和glTexGen*()没有在该列表中出现;它们不会在纹理对象中存储状态。


因此,glTexParameter*仅会影响当前绑定的纹理。


2
非常酷,这正是我所希望的,否则每次绑定纹理时我都必须进行一堆状态更改。 - Justin Meiners
1
@JustinMeiners 在现代GL中,有一个名为glGenSamplers的函数可以提供你所需要的东西。 - mlvljr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接