2013-09-30 14 views
7

因爲我不是專家,請不要認爲這個問題很愚蠢。 我已經閱讀了幾個使用glTexParameter設置紋理參數的教程。我在說GL_TEXTURE_MIN_FILTER,GL_TEXTURE_MAG_FILTER,GL_TEXTURE_WRAP_R等。 突然我遇到了一個教程,現在使用glSamplerParameter來設置這些參數。glTexParameter和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正在處理圖像,而這些參數本身就是指定圖像屬性的。

但我不太明白爲什麼這些2 GL呼叫之間有一些常見的參數。應該在什麼時候使用?在我看來,採樣參數(GL_TEXTURE_MIN_FILTER,GL_TEXTURE_MAG_FILTER,GL_TEXTURE_WRAP_R等)應該只適用於採樣器(glSamplerParameter)而不適用於glTexParameter。

請幫我理解兩者之間的區別。

回答

10

glSamplerParameter是比較新的。紋理採樣的方式實際上是進行採樣的事物的屬性,而不是紋理本身的屬性 - 不僅僅是語義方面,而是實際的真實硬件。

除了表現事物的願望,因爲他們實際上在硬件上的功能,將兩個不相關的東西綁在一起可能會導致性能損失。如果你對某物進行採樣,那麼採樣器的一個屬性就是例如您可以在同一着色器中以兩種不同的方式對相同的紋理進行採樣。如果它是紋理的屬性,那麼你將不得不上傳相同的紋理兩次或寫一個多通道着色器。

因此,這兩件事情正在分離。

+0

這聽起來像使用glSamplerParameter在許多方面更好。您能否指出使用glTexParameter的情況有其優勢? – viktorzeid

+3

@kvikram:真的沒有= P Sampler對象是它應該一直工作的方式,以及它在D3D中已經工作了多年的方式。將採樣器狀態與紋理對象分開是一個巨大的提升,您可以簡單地通過將不同的採樣器綁定到TMU來更改過濾器模式。他們是OpenGL 3.3功能,但得到了廣泛的支持。 –

+0

感謝你們倆。 – viktorzeid

2

在這裏尋找一個reference about Sampler Objectshere from geeks3d

它被添加到核心的OpenGL 3.3版本(所以應該很好適應今天)。

通常它從紋理數據中分離採樣和紋理。以前它是紋理對象的任務(這是非常低效和有問題的)。現在新的解決方案提供了很大的靈活性。

參數是一樣的紋理對象,但只涉及到採樣: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​