glTexParameter和glSamplerParameter有什么区别

时间:2013-09-30 03:17:34

标签: opengl textures

因为我不是专家,所以请不要愚蠢地考虑这个问题。 我已经阅读了几个使用glTexParameter设置纹理参数的教程。我在谈论GL_TEXTURE_MIN_FILTER,GL_TEXTURE_MAG_FILTER,GL_TEXTURE_WRAP_R等。 突然,我遇到了一个现在使用glSamplerParameter来设置这些参数的教程。

我看到glTexParameter和glSamplerParameter之间有一些常见的参数,如(GL_TEXTURE_MIN_FILTER,GL_TEXTURE_MAG_FILTER,GL_TEXTURE_WRAP_R,GL_TEXTURE_MIN_LOD等),还有一些只适用于glTexParameter(GL_TEXTURE_BASE_LEVEL,GL_TEXTURE_SWIZZLE_R等)。我完全理解不常见的,因为毕竟glTexParameter正在对图像起作用,而这些参数本身就指定了属性图像。

但是我不太明白为什么这两个GL调用之间会有一些共同的参数。哪个应该用?在我看来,像(GL_TEXTURE_MIN_FILTER,GL_TEXTURE_MAG_FILTER,GL_TEXTURE_WRAP_R等)的采样参数应该只适用于采样器(glSamplerParameter)而不适用于glTexParameter。

请帮助我理解两者之间的区别。

2 个答案:

答案 0 :(得分:11)

glSamplerParameter相对较新。采样纹理的方式实际上是进行采样的事物的属性,而不是纹理本身的属性 - 不仅仅是语义术语,而是实际的真实硬件。

除了想要在硬件上实际运行功能的愿望之外,将两个不相关的东西捆绑在一起可能会使您在性能方面付出代价。如果你采样的方式采样器的属性,那么例如您可以在同一着色器中以两种不同的方式对相同的纹理进行采样。如果它是纹理的属性,那么你将不得不上传相同的纹理两次或写一个多遍着色器。

因此,这两件事现在正在分离。

答案 1 :(得分:4)

在这里查看reference about Sampler Objectshere from geeks3d

它已经在3.3版本的Core OpenGL中添加(所以今天应该很好地适应)。

通常,它将纹理数据中的采样与纹理分开。以前它既是纹理对象的任务(这是非常低效和有问题的)。现在,新的解决方案提供了很大的灵活性。

参数与纹理对象的参数相同,但仅与采样有关:GL_TEXTURE_WRAP_S​, GL_TEXTURE_WRAP_T​, GL_TEXTURE_WRAP_R​, GL_TEXTURE_MIN_FILTER​, GL_TEXTURE_MAG_FILTER​, GL_TEXTURE_BORDER_COLOR​, GL_TEXTURE_MIN_LOD​, GL_TEXTURE_MAX_LOD​, GL_TEXTURE_LOD_BIAS​, GL_TEXTURE_COMPARE_MODE​, or GL_TEXTURE_COMPARE_FUNC​