2011-07-13 184 views
5

我正在爲iOS和Android製作遊戲。 我在很多地方看到使用索引繪製比繪製三角形數組更有效。glDrawElements vs glDrawArray效率

事情是,我使用有損壓縮頂點(如md2的文件格式),它只需要少於僅索引 - 數組:N * 3(xyz)* 1(uchar)+ translate(12字節)+比例(12字節)。這個數組看起來像這個數組是比索引和壓縮元素更好的選擇,儘管蘋果的OpenGL profiler工具說我應該使用這個數組來處理這個數組。 glDrawElements ..

OpenGL實現是否偏向索引數組?或者這是因爲索引數組比常規未壓縮數組包含的數據少?

p.s. 我使用OpenGL es 2.0,頂點着色器是解壓頂點的人。

回答

1

使用glDrawElements()將節省大量的內存,您可以按任意順序指定數組元素。

但是,使用glDrawArrays(),唯一的選擇是在列表中順序迭代。

必須實驗。

3

您正在使用頂點數組還是頂點緩衝區對象?如果您使用頂點陣列,那麼您可能需要考慮查看glDrawRangeElements而不是glDrawElements

除非你所有的多邊形都有不同的頂點(不可思議的事),glDrawElements將快於glDrawArray因爲glDrawElements將利用反覆頂點將被加載到GPU緩存的事實,並且不會有被加載更多對於該頂點所屬的每個多邊形來說,都是一次。但是,在glDrawArray中,它將遍歷數組,並且無法關聯類似的頂點,所以它將不得不多次加載它們。

但是,它總是取決於你的具體情況。嘗試使用分析器或使用這些方法中的每一種獲取幀率。切換它們不應該太難。如果一個人明顯更好,那就用那個。如果兩者都不是很好,那麼它可能無關緊要。請記住,不成熟的優化是一切罪惡的根源。祝你好運! :)