2017-10-13 126 views
0

如果我的理解是正確的,那麼紋理單元就有多個可以將紋理綁定到的目標(GL_TEXTURE_2D等)。我可以用glActiveTexture來改變當前激活的紋理單元。當我打電話給glBindTexture時,我將指定的紋理對象綁定到當前活動紋理單元的指定目標,對嗎?調用glActiveTexture編輯一個已經綁定的紋理就足夠了嗎?

當我想稍後更改紋理的參數或調用像glTexSubImage2D這樣的函數時,是否足以使用我的紋理綁定的紋理單元調用glActiveTexture?或者每次都必須致電glBindTexture,即使紋理已經綁定到某個單元?

回答

2

只要你知道什麼狀態綁定到哪個單位,你可以依靠改變glActiveTexture切換到正確的單位找到它。

但是,您不應該依賴於此目的。不是因爲OpenGL不可靠,而是因爲你可能是錯誤的關於你認爲你綁定了哪個單元。

此外,它模糊了綁定紋理與渲染紋理之間的界限,並將紋理綁定到修改爲它。你希望兩者完全分開。首先,因爲在渲染循環中修改紋理的狀態(在其中綁定它來修改它)是不好的形式,可能會很慢。其次,當採用GL 4.5和DSA時,您可以快速有效地完成此任務。

0

您可以將Texture單元看作GPU上的管道。 GPU上有很多這樣的紋理單元。通過調用glActivateTexture(),您告訴OpenGL驅動程序告訴GPU我將綁定下一個負載/將其連接到所提到的紋理單元中的任何紋理。通過說glBindTexture()告訴驅動程序,無論我要做什麼操作,請執行它在我綁定的紋理上。因爲一旦你調用了glTextureImage2D,你的紋理就駐留在驅動程序的內存中,因此你不能直接訪問它。所以驅動程序已經給你處理你綁定的紋理對象,並告訴驅動程序我正在談論的資源。

所以,當你把它總是很好的時候同時激活紋理單元,然後綁定你的紋理。正如您先完成激活並稍後進行綁定,紋理將自動綁定到您提供的單位。

如果您在默認情況下不提及紋理單元,將使用GL_TEXTURE0,因此有時可能會引起混淆。

希望這會有所幫助。

相關問題