是什么让glBufferSubData在大缓冲区上变慢?

时间:2016-02-03 19:54:17

标签: c++ opengl vbo

我注意到随着缓冲区大小的增加,在VBO中更新少量顶点变得非常慢。例如,当我更新时,比如说,512 * 512缓冲区中的2个顶点要慢得多,那么当我更新整个256 * 256缓冲区时,尽管更新的数据量完全相反。 这是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]));

1 个答案:

答案 0 :(得分:1)

好吧,我对我的解决方案做了一些研究,发现VBO更新并不是真正的瓶颈。减慢程序速度的原因是数据的计算量很大,这显然是影响最大的。

所以,实际上,正确的anser是:不,这不是glBufferSubData 的正常行为。缓冲区大小不会对glBufferSubData性能造成如此大的影响。