2010-10-28 30 views
9

被施加在OpenGL中我一直理解glEnable(GL_TEXTURE_1D)glEnable(GL_TEXTURE_2D)和/或glEnable(GL_TEXTURE_3D)(和相應的glDisable)是每紋理單元參數。是否應glEnable(GL_TEXTURE_2D)每紋理單元

最近我試圖證實這一點,但沒有找到任何明確的文件證實這個問題的任何方式。

簡單地說,並在代碼中,我應該這樣做

glActiveTexture(GL_TEXTURE0); 
glEnable(GL_TEXTURE_2D); 
... bind etc ... 

glActiveTexture(GL_TEXTURE1); 
glEnable(GL_TEXTURE_2D); 
... bind etc ... 

或本

glEnable(GL_TEXTURE_2D); 

glActiveTexture(GL_TEXTURE0); 
... bind etc ... 

glActiveTexture(GL_TEXTURE1); 
.... bind etc ... 

我希望能找到一些清晰度。

回答

7

這確實是每紋理單元。在我發現提到這一點,最近的文檔明確是的Open GL 2.1規範(2006年更新)here

在第3.8.16:紋理應用

它可能是在新的規範中提到的地方,但他們重組重組。你可以看看opengl org網站上的所有Open GL版本規範(我想發佈一個鏈接,但我似乎無法發佈多個)。

+5

嗯,實際上,它不會在最新的核心修訂版本中,因爲固定功能已被棄用,然後被刪除,而Enable則控制着固定功能狀態。它對着色器沒有任何影響。 – Bahbar 2010-10-28 18:40:26

+0

很高興知道! – Montdidier 2010-10-29 00:42:54

+0

@Bahbar:你的意思是GLSL着色器的註釋可以控制紋理單元和採樣器的狀態,因此不需要明確的glEnable(GL_TEXTURE2D)例如? – Montdidier 2010-10-29 00:44:35

8

它是每個紋理單位。

從GL1.5說明書中,3.8.15:

每個紋理單元被啓用並從 結合 到紋理對象獨立於其它紋理單元

1

如果在OpenGL中使用GLSL着色器,調用glEnable(GL_TEXTURE)並沒有影響。此外,如果您打算繼續使用OpenGL 3.x核心配置文件,請記住glEnable(GL_TEXTURE)已過時。

+0

'glEnable(GL_TEXTURE_2D)'仍然對我的代碼有影響,儘管只有着色器代碼。看起來,調用'glBindTexture'改變行爲...這將是OpenGL 3.2核心配置文件。 – 2014-07-24 18:59:07

相關問題