用于修改交错顶点属性的跨步缓冲区副本

问题描述 投票:0回答:0

这个问题和这个有点关系,但是问了好久了。基本前提:我有具有交错属性的设备本地(不可映射)顶点缓冲区。由于我针对的硬件的基准测试结果,这些属性(部分)交错。现在我需要从其他设备本地缓冲区以及主机更新其中一些属性。

编辑:例如,我有以下顶点缓冲区设置:

现在我只想更新对象 2 的法线,或者我想将所述对象移动到另一个缺少顶点颜色的缓冲区(同时在主机端不再有可用的对象数据)。据我所知,我有三个选择:

  1. 将数据(可能部分)复制到主机可映射缓冲区(或两个,以防在设备本地缓冲区之间复制)。在那里我们可以更新我们想要的属性,然后批量复制数据。
  2. 使用计算着色器只复制我们想要的那些属性。
  3. 沟交错属性。

第一个选项具有明显的缺点,即具有额外的副本以及 GPU-CPU 同步。第二个涉及着色器调用而不是使用 DMA 来执行复制,但我不知道这到底有多糟糕。考虑到我的基准测试表明它仍然是某些集成 GPU 的选择,数字 3 并不是一个很好的选择,但如果其他选项使更新过程太慢,我会考虑它。

有什么我想念的吗?也许在后来的 OpenGL 版本之一中添加了一些秘密的 strided-copy 函数?

提前致谢

PS:Vulkan 可以选择一次复制多个缓冲区。我在 OpenGL 中没有看到类似的东西。我假设 OpenGL 不提供类似的东西是正确的吗?

opengl opengl-4
© www.soinside.com 2019 - 2024. All rights reserved.