2017-08-06 83 views
1

比方說,我有三個不同的紋理對象與他們不同的圖像數據。這三個紋理對象都綁定到紋理單元0.理解紋理

我在場景中有三種模型,每種都使用這些紋理之一。

在我的片段着色器中,我有一個sampler2D變量。所有模型都使用相同的着色器程序進行渲染。

現在我做在序列以下操作

  1. 綁定紋理對象1
  2. 渲染模型1

  3. 綁定紋理對象2

  4. 渲染模型2

  5. 綁定紋理對象3

  6. 渲染模型3

有什麼想問的是這一點,你紋理不同質地不同型號的方式,確實在片段着色器取樣器讀取當前綁定的紋理數據。如果紋理綁定到不同的紋理單元會發生什麼,我需要一個不同的採樣器。

回答

2

採樣器總是從當前綁定的紋理讀取它所設置的紋理單元。由於默認的活動紋理單位是單位0,並且採樣器的默認值也是0,所以您的代碼應該工作,除非您更改採樣器或活動紋理單位。

如果紋理綁定到另一個紋理單元,你必須確保該活動的紋理單元(glActiveTexture)與採樣(glUniform1i)設定的值相匹配。如果綁定,例如紋理爲GL_TEXTURE2,則必須將採樣器設置爲glUniform1i(sampler_location, 2)