opengl 为什么glBufferSubData很慢?

kfgdxczn  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(123)

当尝试使用glBufferSubData访问GL_ARRAY_BUFFER到128字节缓冲区大小时,访问最多需要200微秒。相反,当再次使用glBufferData分配整个缓冲区时,只需要3微秒。我在glGetBufferSubData上遇到了类似的问题。我的CPU是i5 8600k,GPU是GTX 1080 Ti。

glBufferData(GL_ARRAY_BUFFER, sizeof(mat4) * 2, matrices.data(), GL_DYNAMIC_DRAW); // 3 us
glBufferSubData(GL_ARRAY_BUFFER, sizeof(mat4) * index, sizeof(mat4), matrix.data()); // at worst 200 us

using namespace std::chrono;
// same measurement for both cases
auto timer = high_resolution_clock::now();
glBufferData(GL_ARRAY_BUFFER, sizeof(mat4) * 2, matrices.data(), GL_DYNAMIC_DRAW);
std::cout << duration_cast<microseconds>(high_resolution_clock::now() - timer).count() << '\n';
hsvhsicv

hsvhsicv1#

这个问题可能已经过了答案,但今天我正在考虑使用glGetBufferSubData,并注意到尽管运行和NVidia GEFORCE RTX 3060,但仍然有点滞后。将数据下载到CPU/RAM的时间为0.006秒,加载到GPU的时间为0秒。我建议在RAM中保存一个矩阵的副本,并将矩阵的索引存储在着色器存储缓冲区中,以便您可以在以后的程序中更新它。至少我是这么做的。
你可以在这里看到我的原始文章:将矩阵下载到CPU/RAM以更新它并将其发送回GPU是否有效?

相关问题