2012-10-25 64 views
10

我是桌面GL開發人員,我開始探索移動世界。共享內存體系結構中的OpenGL(ES 2.0)VBO性能

爲了避免誤解或者歡迎而瑣碎的回覆,我可以虛心地說,我非常瞭解GL和GL | ES機器。

簡而言之,如果我們在共享內存架構中使用GL | ES 2.0,使用VBOs對客戶端陣列使用背後的意義何在?

更詳細地說:

  • 是記憶原始塊,司機無法以任何方式,因爲訪問模式取決於優化任何

    頂點緩衝器:1)如何在應用配置頂點數據佈局,2)頂點着色器如何消耗緩衝區內容,以及3)我們可以有許多以不同方式操作的頂點着色器,並且使用相同的緩衝區。

  • 對齊方式:單個VBO存儲可以在對底層GL系統最優的地址開始;如果我只是強迫(例如,尊重對齊最佳實踐)客戶端數組分配到這些邊界?

  • 基於瓦片的渲染與即時模式架構不應該發揮作用:據我的理解,這與我的問題(即內存訪問)無關。

據我所知,使用維也納組織可以有你的代碼運行更好/更快未來平臺/硬件,而無需修改它,但這不是這個問題的重點。除此之外,我還認識到,在共享內存架構中使用VBO會使內存使用量翻倍(如果由於某種原因,您必須保持頂點數據的可用性),並且這會花費您一筆數據。

與交錯頂點陣列一樣,VBO的使用在開發者論壇/博客/官方技術文檔中有一個很大的「炒作」,沒有任何數據支持這些語句(即基準)。

  • VBO在共享內存架構上的使用是否值得?
  • 客戶端陣列工作正常嗎?
  • 您對此有何評論?

回答

3

我可以報告說,使用VBOs在Android設備上存儲頂點數據給了我零性能改進。在Adreno,Mali400和PowerVR GPU上試用過。但是,我們使用VBO考慮這是OpenGL ES的最佳實踐。

您可以在我們的article頂點緩衝對象段落)中找到相關注意事項。

+0

非常感謝您分享這些成果。最後,這對於性能的觀點來說很重要。無論如何,我無法解釋自己如何在一個共享的內存GPU中提倡VBO的使用,我想這僅僅是爲了市場營銷,或者是爲了讓那些對GL良好實踐相對陌生的人「準備好」目前來說,最好不要使用它們,因爲如果你仍然需要CPU側的存儲器,並且由於不可避免的複製操作,潛在的存儲器翻倍)。 – spattija

-1

我會告訴你,我所瞭解的iOS平臺。 VBO的確會提高你的表現。

  1. VBO是完美的,如果你有一個靜態幾何圖形 - 一旦被複制,每次繪圖調用都不會產生額外開銷。CA會將您的數據從客戶端內存複製到每個drawcall的「gpu內存」。如果你忘了它,它可能會重新調整數據。
  2. VBO可以映射到gpu vie glMapBuffer - 這是一個異步操作,意思是說,它幾乎沒有開銷,但你應該記住 - 當你映射\取消映射緩衝區時,最好在unmap操作後使用它2幀 - 避免同步
  3. 蘋果工程師聲稱,即使您將每幀重新上傳,VBO在SGX硬件上的性能都會優於CA - 我不知道細節。
  4. VBO是一種最佳實踐。 CA已棄用。更好地保持速度與現代潮流,並保持儘可能多的跨平臺,儘可能
+0

當然,你的觀點是使用維也納組織的標準理由,但不幸的是,其中大部分已經排除在問題之外。 –

+0

沒有關於緩衝區映射的東西 - 這是在CPU和GPU之間發送幾何圖形的最快方式,但是有一定的侷限性 – StiX

+0

緩衝區映射不應該在我的問題的上下文中發揮作用,它將鎖定更新緩衝區內容,而我在向GL Vertex Puller(DX術語中的輸入彙編程序)提供數據的背景下,我詢問具有共享內存的GPU和沒有專用內存的GPU的性能優勢。 – spattija