2016-05-17 143 views
1

目前,在我的渲染引擎中,每個網格數據都有一個VBO(1個VBO用於頂點,1個VBO用於法線,1個VBO用於紋理座標,1個VBO用於切線,1個VBO用於bitangents )並且所有這些都與VAO綁定在一起。OpenGL單個VBO vs多個VBO

我現在想改變系統來保存包含所有網格數據(頂點,法線等)的單個VBO,但是我會從中獲得多少糊塗?談到速度和效用(因爲如果我的網格沒有紋理,我可能沒有所有的數據並且只提供頂點和法線)。

回答

0

您將尋求減少整體內存帶寬。如果您的緩衝區對象包含交錯在一起的所有屬性,那麼這意味着您的整個數組對象只引用一個連續的內存部分。內存子系統緩存起來要容易得多。這與CPU的原理完全相同 - 更多的本地連續內存訪問,它們可能會更快。

還有一個潛在的不利因素:一般規則是您應該將元素與元素大小和四個字節中的較大者對齊。這導致了一些浪費的空間。但好處幾乎總是超過損害。

顯然唯一會受到影響的是GPU花費頂點的時間。如果你鑲嵌或填充邊界,你不會立即看到任何改進。

+0

好的。現在我正在設置環境來測試他們兩個,我希望我會看到使用一個VBO的一些改進,因爲現在它很慢,而我認爲的一件事是因爲是多個VBO。我會明白的 – zeb