gpt4 book ai didi

c++ - 为什么 glBufferSubData 很慢?

转载 作者:行者123 更新时间:2023-12-05 07:05:53 41 4
gpt4 key购买 nike

当尝试使用 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';

最佳答案

这个问题可能早该回答了,但今天我正在考虑使用 glGetBufferSubData 并注意到尽管运行了 NVidia GEFORCE RTX 3060 还是有点滞后。有 0.006 秒的时间将数据下载到 CPU/RAM 和 0第二次加载到GPU。我建议在 RAM 中保留矩阵的拷贝,并将矩阵所在位置的索引存储在着色器存储缓冲区中,以便您以后可以根据需要在程序中更新它。至少这就是我正在做的事情。

你可以在这里看到我的原始帖子:Is it efficient to download matrix to CPU/RAM to update it and send it back to GPU?

关于c++ - 为什么 glBufferSubData 很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62655935/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com