2014-03-27 133 views
3

我有一個分配〜300個VBO的應用程序。但是,每幀只能使用其中的40個繪製命令。我已經用OpenGL分析器驗證了這一點。爲什麼分配大量的VBO會導致性能問題?

我注意到,如果我減少駐國際中心組織的數量,性能大爲改善。但是,鑑於大多數維也納國際組織大多數時間都沒有使用,我很驚訝這是一個問題。我假設大多數VBO沒有分配給它們的內存,因爲我甚至沒有在未使用的VBO上調用glBufferData。

有誰知道爲什麼有額外的未使用的維也納組織會造成性能的下降?我猜這可能是依賴於驅動程序(我有一個Nvidia 460GTX)。

而且,我會想知道如何使一束粒子系統的結合(其中大部分是任何給定的框架中使用)到一個單一的VBO,這樣我就不會遇到這個問題。

編輯:事實證明,性能問題與維也納各組織不相關。不過,我在調查過程中瞭解了很多關於將數據流入維也納國際中心的情況這篇文章非常有趣:http://onrendering.blogspot.com/2011/10/buffer-object-streaming-in-opengl.html

+0

驅動程序可能仍保留可能的東西他們。 –

+0

@耶穌是的,我很確定這是一個驅動程序問題。無論如何,使用300個VBO都是頭疼的問題,所以我會考慮另一種方案。 –

+1

如果您只使用大約40次繪製調用,則您可能只需重新使用一些VBO。 –

回答

1

事實證明,駐國際中心組織的數量是不是在我的情況下的性能瓶頸的原因。實際上,大多數OpenGL實現似乎都能很好地處理大量的VBO。我在2009年的MacBook Air和Nvidia的GTX 460

切向相關測試:如果你使用的許多維也納組織,通常有一種方式,以避免獲取一些效率。就我而言,我使用一個單一的VBO流來渲染來自多個不同粒子系統的粒子,而不是將VBO專用於每個粒子系統。這減少了批量/繪製調用的次數,並釋放了一些CPU週期。

這裏有VBO流的更多信息: http://onrendering.blogspot.com/2011/10/buffer-object-streaming-in-opengl.html

相關問題