2013-07-15 56 views
2

對於每個屬性,使用跨步頂點緩衝區與高度打包緩衝區有什麼優缺點?我的意思是比如:OpenGL緩衝區。步幅與緊密排列

步:xyzrgb xyzrgb xyzrgb

緊:xyzxyzxyz rgbrgbrgb

乍一看它可能看起來像你輕鬆使用步幅時可以改變大小,但的內容當您使用glBufferData重新分配頂點緩衝區時,頂點緩衝區會被刪除。

對我來說,最好使用緊湊模型,因爲位置,顏色和texcoords可能來自本地內存中的不同數組,因爲沒有stripped bufferdata函數,所以在上傳之前必須將所有數組複製到交錯緩衝區或者爲每個屬性的每個頂點使用一個glBufferSubData(我想是可怕的想法)。

似乎常見的做法是使用交錯緩衝區(跨度)。這是爲什麼?我在這裏失蹤的任何東西?

回答

3

我認爲通常有一個交錯緩衝區,因爲這更容易創建(涉及更少的緩衝區,更直觀)並且據說更快(因爲內存訪問模式或類似的東西),緊密打包的最大優點是僅更新需要更新的數據的能力,導致更快的更新。大多數OpenGL教程通過繪製靜態網格來講述VBO,它不需要更新,因此可以從交織數據中受益。

一般意見似乎是:交錯儘可能多,需要時拆分。

參見: How does interleaved vertex submission help performance?

兼:Performance gain using interleaved attribute arrays in OpenGL4.0

參見: http://www.opengl.org/wiki/Vertex_Specification_Best_Practices

直接指出:

「多少交錯屬性有助於渲染性能還不是很清楚。分析數據是必要的。交錯頂點數據可能佔用更多的空間比由於ali的非交織政府需要。「

+0

謝謝。非常豐富! – bofjas