opengl 为什么glBufferSubData很慢?

ktecyv1j  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(270)

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

zdwk9cvp1#

这个问题可能早就该回答了,但今天我在考虑使用glGetBufferSubData时发现,尽管运行了和NVidia GEFORCE RTX 3060,但还是有一点延迟。将数据下载到CPU/RAM需要0.006秒,加载到GPU需要0秒。我建议在RAM中保留一份矩阵的副本,并将矩阵所在位置的索引存储在着色器存储缓冲区中,以便您可以在以后的程序中更新它。至少我正在这么做。
你可以在这里看到我的原始帖子:将矩阵下载到CPU/RAM进行更新并将其发送回GPU是否高效?

相关问题