因为我不是Maven,所以请不要认为这个问题很愚蠢。我已经阅读了几个教程,其中使用gltex参数设置了纹理参数。我说的是GL_纹理_MIN_FILTER、GL_纹理_MAG_FILTER、GL_纹理_WRAP_R等。突然,我看到了一篇教程,它现在使用glSples参数来设置这些参数。
我看到glTexas参数和glSples参数之间有一些常见的参数,如(GL_纹理_MIN_FILTER、GL_纹理_MAG_FILTER、GL_纹理_WRAP_R、GL_纹理_MIN_LOD等),还有一些仅适用于gl纹理参数(GL_纹理_BASE_LEVEL、GL_纹理_SWIZLE_R等)。我完全理解那些不常见的参数,因为毕竟gltex参数作用于图像,而这些参数指定的是图像本身的属性。
但我不太明白为什么这两个GL调用之间有一些共同的参数。哪种应该在什么时候使用?在我看来,像(GL_纹理_MIN_FILTER、GL_TEXTURE_MAG_FILTER、GL_TEXTURE_WRAP_R等)这样的采样参数应该只适用于采样器(GlSsamerParameter),而不适用于glTexas参数。
请帮我理解一下两者之间的区别。
2条答案
按热度按时间sz81bmfz1#
glSamplerParameter
相对较新。纹理的采样方式实际上是进行采样的事物的属性,而不是纹理本身的属性-不仅是语义术语,而且是在实际的、真实的硬件上。除了希望按照它们在硬件上的实际功能来表示它们之外,将两个不相关的东西捆绑在一起可能会在性能方面付出代价。如果将采样方式设置为采样器的属性,则可以在同一着色器中以两种不同的方式对同一纹理进行采样。如果它是纹理的属性,那么您将不得不上载相同的纹理两次或编写多过程着色器。
因此,这两件事现在被分开了。
vq8itlhq2#
在此处查找reference about Sampler Objects和here 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