2011-04-18 45 views
5

如何關閉多個紋理單元,因爲它們影響其他渲染部分。 激活我的他們說:OpenGL:關閉多個紋理單元

 glActiveTexture(GL_TEXTURE0 + index); 
     glBindTexture(GL_TEXTURE_2D, 
       ((MaterialSampler2D)specular).texture.getTOB()); 
     shader.setTexture2(index); 

有什麼樣glDeactivateTexture?

回答

10

glActiveTexture不激活紋理單元。它只是選擇你正在修改的紋理單元(是的,OpenGL的對象狀態管理是可怕的)。 您使用glEnable(<texture-target>)glDisable(<texture-target>)激活紋理。在你的情況下,目標將是GL_TEXTURE_2D

所以要回答你的問題:使用glActiveTexture(GL_TEXTURE0+i)選擇紋理單元i,然後用glDisable(GL_TEXTURE_2D)將其禁用。

請注意,所有這些都與着色器是多餘的 - 你可以不訪問那裏的值。

+2

我使用着色器,我不需要使用glEnable/glDisable(GL_TEXTURE_2D),是嗎?我用這個,它不能幫助我。 – itun 2011-04-18 16:40:47

+0

確切地說,除了一些狡猾的驅動程序是錯誤的(我認爲有一個錯誤,一次影響ATI驅動程序的這個問題) – ltjax 2011-04-18 18:50:27

1
+0

您認爲哪些參數值對我有幫助? – itun 2011-04-18 15:56:28

+0

從我的頭頂上看似 glActiveTexture(GL_TEXTURE0); glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D); 不知道這是你打算做什麼? – Bart 2011-04-18 16:04:03