这个问题和这个有点关系,但是问了好久了。基本前提:我有具有交错属性的设备本地(不可映射)顶点缓冲区。由于我针对的硬件的基准测试结果,这些属性(部分)交错。现在我需要从其他设备本地缓冲区以及主机更新其中一些属性。
现在我只想更新对象 2 的法线,或者我想将所述对象移动到另一个缺少顶点颜色的缓冲区(同时在主机端不再有可用的对象数据)。据我所知,我有三个选择:
第一个选项具有明显的缺点,即具有额外的副本以及 GPU-CPU 同步。第二个涉及着色器调用而不是使用 DMA 来执行复制,但我不知道这到底有多糟糕。考虑到我的基准测试表明它仍然是某些集成 GPU 的选择,数字 3 并不是一个很好的选择,但如果其他选项使更新过程太慢,我会考虑它。
有什么我想念的吗?也许在后来的 OpenGL 版本之一中添加了一些秘密的 strided-copy 函数?
提前致谢
PS:Vulkan 可以选择一次复制多个缓冲区。我在 OpenGL 中没有看到类似的东西。我假设 OpenGL 不提供类似的东西是正确的吗?