我注意到随着缓冲区大小的增加,在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]));
答案 0 :(得分:1)
好吧,我对我的解决方案做了一些研究,发现VBO更新并不是真正的瓶颈。减慢程序速度的原因是数据的计算量很大,这显然是影响最大的。
所以,实际上,正确的anser是:不,这不是glBufferSubData 的正常行为。缓冲区大小不会对glBufferSubData性能造成如此大的影响。