2014-03-31 218 views
0

經過大量的閱讀中,我能夠理解在OpenGL ES 2.0加載紋理所需的步驟,但一些問題仍沒有回答:紋理計劃 - 的OpenGL ES 2.0的Android

什麼是下面的代碼實際上是在做什麼?

glUniform1i(sampler2DLocation, 0); 

如果我從我的代碼中刪除此行,則沒有任何更改。有些書形容爲「告訴質地均勻採樣告訴它使用紋理着色器從紋理單元0讀」

這行之後調用:

glActiveTexture(GL_TEXTURE0); 

但在規定khronos.org默認的活動質地GL_TEXTURE0,所以我想行「glActiveTexture(GL_TEXTURE0);」代碼只是被寫成一種良好的習慣?

最後一件事,當我打電話:

glBindTexture(GL_TEXTURE_2D, genTextures[0]); 

我說,影響「GL_TEXTURE_2D」未來的呼叫會影響存儲在genTextures [0]紋理單元,由於綁定。但是「GL_TEXTURE_2D」和活動紋理單元之間有任何關係?我的意思是,在03個「組件」之間有一條內在的鏈條?

genTextures [0] < ---> GL_TEXTURE_2D < --->活動紋理單元

謝謝

回答

0

爲什麼代碼繼續,即便你刪除指令「glUniform1i工作的原因(sampler2DLocation,0);「是由於,可能是由於沒有提供製服時司機分配的默認值。

爲了更好地理解它,我需要一個共享代碼的例子和採用統一ID的方式,但我相當確定該指令是通過着色器向GPU表示使用紋理單元0。

調用的效果 「glUniform1i(sampler2DLocation,0);」說拿紋理單元0 不是要求它的效果,反正套採樣統一爲0,因此,即使沒有正式正確的,具有相同的行爲。

根據OpenGL標準,您使用glActivateTexture激活紋理單元,該單元需要紋理單元的編號,然後將紋理與glbindtexture綁定到該特定的當前紋理單元。

換句話說,首先你設置你想要的工作紋理單元,然後你告訴哪個紋理需要它要綁定的驅動程序。

我希望這會有所幫助。 莫里吉奧