【问题标题】:Why is OpenGL buffer sub data upload speed decreasing with increase in total buffer size?为什么 OpenGL 缓冲区子数据上传速度会随着总缓冲区大小的增加而降低?
【发布时间】:2023-02-23 03:53:34
【问题描述】:

我在 OpenGL 中有一个缓冲区 (SSBO),需要非常频繁地更新。我所做的是首先创建一个缓冲区,通常是这样的:

glGenBuffers(1, &buff);
glBindBuffer(..., buff);
glBufferData(..., 0, totalSize, NULL, GL_DYNAMIC_DRAW);

现在我用glBufferSubData()更新它。

我注意到,随着缓冲区大小的增加,更新相同大小的子数据的时间呈指数级增长。

为什么上传相同大小的数据需要更多时间?还有没有更快的方法来做到这一点?

【问题讨论】:

  • 可能没有适用于所有硬件供应商的好的答案。 OpenGL 没有指定如何实现数据上传,因此它取决于驱动程序的实现。
  • 您是否删除了旧缓冲区?

标签: c++ opengl graphics gpu


【解决方案1】:

从我可以使用的信息来看,上传时间增加的原因似乎是因为动态绘制意味着您可能会部分更改缓冲区,这将不得不重新分配计算机资源并导致重新计算和其他可能的东西放慢上传速度。我找到的解决方案是确保动态绘图是您可以在此处进行的最佳绘图调用,因为错误地选择最适合您的情况的绘图方法可能会导致更长的上传时间。有关更详尽的解释,请参阅https://registry.khronos.org/OpenGL-Refpages/es1.1/xhtml/glBufferData.xml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多