2014-09-10 84 views
0

我有兩種方法發送兩個變量到我的頂點:Opengl ES 2.0 Vertex - 哪種方式更有效率?

A,使用兩個屬性發送兩個變量。 B,將兩個變量合併爲一個,例如'Mix = Var1 * 100 + Var2',並且只發送一個屬性'Mix'到我的頂點。在頂點代碼中,我使用一些計算來呈現'Var1'和'Var2'。

我不知道哪種方式更有效率(花費更少的時間)。

任何想法?

+2

我也不知道。 (*提示:知道它的知識*) – 2014-09-10 12:02:43

+0

也是變量標量或向量。如果它們是矢量,它們具有哪個維度? – datenwolf 2014-09-10 12:13:40

+0

我認爲這只是Glfloat。 – 2014-09-10 12:28:02

回答

0

如果這是您的一個極其奇怪的原因的瓶頸,您可以通過一些大量的迭代來剖析2種方法,以查看差異。你應該知道,即使在得到這個結果之後,你應該考慮在不同的設備上進行相同的測試,因爲輸出可能會因爲不同的GPU而發生變化。

如果您確實選擇使用B方法,您應該輸入一個整數值,而不是乘以100並將其除以100,嘗試使用按位操作,如32位整數中的Var1<<16 + Var2。這意味着一個值將會佔用前16位,另一個值將佔用第二個16位,這些操作速度非常快。

既然你問了這個問題,它表明這個操作不是你的瓶頸,也不會是,你只是問,因爲你希望你的代碼快。如果這是真的,那麼不要擔心這種算法的速度性能,而是問問自己,你的代碼將如何更易於維護。 A方法似乎更直接,會使代碼易讀和可維護,所以我會選擇那一個。除此之外,如果你在某些時候決定這些值將會變得太大以至於無法打包2合1,那麼將代碼從B轉換爲A會有相當大的問題;如果你使用A並且最後需要額外的性能增益(假設B以某種方式更快),那麼你真正需要做的就是編寫這兩行算法並註釋一個額外的屬性。所以從這個角度來看,你應該選擇A.