8

因为我不是专家,所以请不要认为这个问题很愚蠢。我已经阅读了几个使用 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。

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

4

2 回答 2

12

glSamplerParameter比较新。纹理的采样方式实际上是进行采样的事物的属性,而不是纹理本身的属性——不仅在语义方面,而且在实际的硬件上。

除了希望将事物表示为硬件上的实际功能之外,将两个不相关的事物捆绑在一起可能会在性能方面降低您的成本。如果您将某些东西的采样方式设置为采样器的属性,那么例如您可以在同一着色器中以两种不同的方式对同一纹理进行采样。如果它是纹理的属性,那么您将不得不两次上传相同的纹理或编写多通道着色器。

因此,这两件事现在被分开了。

于 2013-09-30T04:20:04.280 回答
4
于 2013-09-30T06:10:32.657 回答