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

标签 c++ opengl vbo

我注意到,随着缓冲区大小的增加,更新 V​​BO 中的少量顶点会变得非常慢。例如,当我更新 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]));

最佳答案

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

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

关于c++ - 是什么让 glBufferSubData 在大缓冲区上变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35186429/

相关文章:

c++ - 将字符串附加到日志文件

c++ - 用于桌面 VR 的 OpenGL 非对称截锥体

c++ - 如何将多个纹理应用于立方体的 VBO?

c++ - 如何为大型网格实现 VBO 并获得流畅的动画?

c++ - 如何在QCoreApplication析构函数中删除对象和线程实例

c++ - Roslyn 是否支持 C++ 生成语法树

C++ STL 优先级队列插入 bad_alloc 异常

c++ - 学习 GLSL Cookbook Chapter 1 - Uniform Blocks 时遇到麻烦

人类的 opengl 旋转

c - opengl交错vbo不渲染到屏幕