紋理單元,每個程序中的OpenGL ES 2.0根據蘋果的文檔,支持OpenGL ES 2.0的限制: "You can use up to 8 textures in a fragment shader."澄清在iOS
這似乎並不顯着特定的,所以我認爲它的意思,「你可以爲您的片段着色器的每次傳遞引用最多8個紋理單位。「
所以,我一直在做的,就是在我的片段着色器給定的傳球,我只引用一個紋理單元,開始紋理單元0。下一次,我引用單元1下傳,單元2 , 等等。根據我上面的假設,這應該做工精細長達GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS.
然而,它只是似乎工作,直到單元7,並且在任何突破> =單元8
聽起來是不是像這樣將導致我打到最大的紋理單位?或者我錯過了什麼?
如果我確實打在片段着色器允許紋理單元的上限,我想我會做什麼時持有程序的可變數組,當我需要多少個紋理在運行時生成的許多方案我已經定義了,當我點擊8的倍數的紋理單元索引時,切換到相應的程序。
這聽起來是合理的,還是我失去了一些東西?
+ (GLint)maximumTextureUnitsForThisDevice;
{
GLint maxTextureUnits;
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
return maxTextureUnits;
}
最強大的設備我有上運行此,視網膜的iPad,我得到最多8個紋理:
如果每個通行證只能使用一個紋理,那麼爲什麼不直接綁定後,每次一個新的紋理通?我很困惑,爲什麼你認爲你需要不斷增加紋理單元編號。 – Tim 2012-08-02 03:53:47
太棒了!因爲我的理解完全錯誤。我認爲將紋理分配給給定的單元會導致將紋理數據發送到opengl的成本,所以我不想在使用紋理時切換單位。現在我總是使用unit 0,它可以解決我在> 8時遇到的任何問題。我正在慢慢爬上學習曲線,所以感謝您指出了這一點。 – jankins 2012-08-02 17:13:33