2016-02-03 72 views
1

我注意到隨着緩衝區大小的增加,更新VBO中的少量頂點變得非常緩慢。例如,當我更新時,例如512 * 512緩衝區中的2個垂直速度要慢得多,然而當我更新整個256 * 256緩衝區時,儘管更新的數據量完全相反。 這是glBufferSubData的正常行爲嗎?是什麼讓glBufferSubData在緩衝區上變慢?

我這是怎麼分配緩衝區:

glBufferData(GL_ARRAY_BUFFER, sizeof(uiMapView::vertex)*(size + 1)*(size + 1), m_verts, GL_DYNAMIC_DRAW); 

這是我如何更新:

glBufferSubData(GL_ARRAY_BUFFER, sizeof(uiMapView::vertex)*iMinId, sizeof(uiMapView::vertex)*(iMaxId-iMinId), (&m_verts[iMinId])); 
+2

除非給出更多的細節,否則這個問題是無法回答的。緩衝區更新性能將受到緩衝區訪問模式,更新頻率以及當然具體實現的嚴重影響。 [OpenGL Insights中的異步緩衝區轉移的免費章節](http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-AsynchronousBufferTransfers.pdf)可能會解釋一些您必須處理的問題。 – derhass

+0

@derhass,感謝您提供有用的鏈接,但這不是一個真正的問題 – Yevheniy8

回答

0

好吧,我做了我的解決方案的一些更多的研究和發現,VBO更新並不是真正的瓶頸。減少我的程序的原因是對數據進行的計算量,這顯然是最大的影響。

所以,實際上,正確的索引是:不,這不是glBufferSubData的正常行爲。緩衝區的大小並不會使這麼大的對glBufferSubData性能產生影響。