2009-12-10 35 views
2

iPhone硬件上的頂點陣列是否有最佳打包格式?我的紋理(三角形)陣列是有序的:iPhone上的打包頂點陣列的最佳排序

  1. 頂點(X,Y,Z)
  2. 頂點法線(X,Y,Z)
  3. 紋理座標(U,V)

這是我一直這樣做的方式。紫外線是否應該在法線之前?我不確定它是否重要。我假設紋理&照明單元將有一個偏好,但我找不到任何關於它。我當然無法察覺到差異。

回答

2

從iPhone OpenGL ES Programming Guide

在OpenGL ES中,啓用每個 屬性應用程序的需要和 到 數據類型的陣列提供一個指針。 OpenGL ES的允許你 指定一個步幅,提供你的 應用 提供多個陣列(也稱爲 作爲陣列的結構)或單個 陣列與單個頂點格式(一個 陣列結構的)的靈活性。

您的應用程序應該使用頂點格式爲單個交錯的 結構的數組 。交錯數據 提供比 更好的存儲器局部性,對每個 屬性使用單獨的陣列。

你可能想分離出的屬性是從你的頂點 其餘數據不同的頻率 更新(如在「頂點緩存 用法」中所述) 數據。同樣,如果屬性數據 可以在兩個或更多個 幾何片段之間共享,則將它們分開可以減少您的內存使用量。

目前的文檔中似乎沒有任何推薦的排序順序,但是有一個關於爲iPhone調整OpenGL ES的技術(TN2230),似乎已經消失。它在它下面的句子:

爲了獲得最佳性能,交織 各個組件的順序位置,法線,顏色,TEXCOORD0, TexCoord1,的pointsize,重量 , MatrixIndex。

請注意,此技術說明可能因其中包含的錯誤或過時信息而被刪除。我不知道我以這種方式看到了大量增加頂點緩衝區對象的能力,當然不像在我可以使用GL_SHORT而不是GL_FLOAT那樣簡單地減小几何體的大小。

+0

謝謝。由於我遵循過時的/撤銷的建議,並且沒有替代品出現,我可以自信地進行。再次感謝! – pestilence669 2009-12-11 23:14:47

0

這沒有什麼區別。

1

頂點屬性的排序實際上只與運行iPhone OS 3的舊設備(iPhone 2G/3G和iPod touch 1G/2G)有關。1或更高版本,如果排序與TN2230中的相同,則可以更高效地提交頂點數據。這不會增加GPU端的頂點吞吐量,但可以降低CPU使用率。正如布拉德所觀察到的,如果你想通過GPU推更多的頂點,最好的辦法就是讓它們變小。

0

由於iPhone只有少量的硬件實現,難道你不能僅憑經驗測量性能,找出哪種方式在實踐中最快,而不是理論上?

+0

我無法檢測到差異。在我自己的基準測試中沒有統計學意義。儘管如此,我並不想僅僅因爲它現在無關就打破未來的兼容性......但是,是的:總是測試假設。 – pestilence669 2010-06-03 04:17:32