gpt4 book ai didi

opengl - 是否可以就地调整 VBO 的大小?

转载 作者:行者123 更新时间:2023-12-04 02:06:04 29 4
gpt4 key购买 nike

标题说明了一切,但为了清楚起见,我将添加一些额外的词。

在这种情况下,调整大小意味着:

  • 在旧 vbo 末尾获得更多存储空间
  • 将旧数据保存在前面
  • (希望不是复制,但至少不是在 CPU 端,这意味着驱动程序应该处理这个)

  • 编辑

    至于解释更多细节并证明我的问题是合理的:
    我会将(正手)未知大小的数据存储到 VBO,但我只知道一个非常粗略的估计上限(10 - 100 倍,在异常情况下甚至更多)。

    当然,我知道我存储了多少数据,当我完成它时,所以存储数据会很好,直到我发现我的 VBO 太小并调整它的大小然后继续存储。

    这就是我不想复制的原因(尤其是不在 CPU 端):
    我在 GPU 上执行所有这些操作以获得交互式帧速率。当我必须复制时,它非常慢甚至不可能,因为没有足够的空间。最糟糕的是通过 CPU 复制数据,从而将所有内容通过总线传递到一个具有足够大小的新内存区域,然后 glBufferData使用新大小和新内存区域作为源的 VBO。那将是性能杀手。

    绕过

    我通过精确估计所需空间来规避这个问题。但是我会让这个问题一个星期没有答案,看看是否有人对此有另一个提示,因为我对解决方案不太满意。

    最佳答案

    我认为不做副本你就不会解决这个问题,因为调整缓冲区大小的唯一方法是调用 glBufferData并且 IMO 无法告诉驱动程序保留旧数据。

    您可以做的至少不将其复制到 CPU 并再次返回,就是为此目的创建某种辅助 VBO,并直接从 VBO 复制到辅助 VBO(使用 ARB_copy_buffer 扩展名),调整 VBO 的大小并将其内容复制回来。

    但我认为最好的方法是事先分配一个更大的缓冲区,因此不需要调整大小,但当然在这种情况下,您需要知道大约需要多少额外的存储空间。

    关于opengl - 是否可以就地调整 VBO 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7256479/

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