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

What makes glBufferSubData slow on big buffer?

本文关键字:缓冲区 glBufferSubData 是什么      更新时间:2023-10-16

我注意到随着缓冲区大小的增长,在 VBO 中更新少量顶点的速度非常慢。例如,当我更新时,512*512 缓冲区中的 2 个 verts 比更新整个 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]));

好吧,我对我的解决方案进行了更多的研究,发现 VBO 更新并不是真正的瓶颈。减慢我的程序的原因是使用数据进行的大量计算,这显然产生了最大的影响。

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