2016-05-14 55 views
0

我們有幾個不同的opengles2.0着色器,他們每個人用不同的制服。我們使用glGetUniformLocation獲取寫入每個制服的數據的位置。然而,這意味着,當我們切換着色器程序,則有時例如,我們正在寫入到cameramatrix一個位置,有時到另一個,所有這取決於制服是該着色器中定義。這意味着通過檢查上傳的值發生了變化,因爲我們可能需要重新上傳覆蓋由不同的着色器不同的統一編寫的價值,我們不能輕易削減冗餘着色均勻上傳。glGetUniformLocation返回相同值的所有程序

儘管我知道在每個着色器程序中都可以包含相同的制服,不管它們是否被使用,glGetUniformLocation會爲每個程序返回相同的位置嗎?或者,例如,可能會在着色器編譯器刪除未引用的制服和一堆了休息時間,使每個着色器有它在不同地點的制服。這是IOS和Android。

感謝

肖恩

回答

1

制服是每個程序的狀態,所以也無所謂自己的位置是否爲不同的程序不同,因爲如果你想避免冗餘均勻變化,那麼你需要追蹤制服基於每個程序的基礎而不是全球基礎,就像您使用DirectX9所做的那樣。

是的,OpenGL的可能刪除未使用的制服或以其他方式重新排列它們,即使你不得不在每個編譯單元中完全相同的人。

+0

OK,所以如果一個程序從glGetUnifiormLocation返回位置「10」的東西,我寫的「99」的浮點值出現,然後切換到已返回的位置「10」別的東西另一個程序,和我寫的「88」到那個位置,而使用第二個程序,那麼如果我切換回來,那麼「99」仍然會被設置爲原始程序?即他們是獨特的地點,還是一些共享? – user3162134

+0

是的,當您切換回來時,99仍然會在您的第一個程序中。 – Columbo