gpt4 book ai didi

opengl - 多个缓冲区与单个缓冲区?

转载 作者:行者123 更新时间:2023-12-02 08:46:21 24 4
gpt4 key购买 nike

我正在绘制简单的 3D 形状,我想知道从长远来看,只使用 1 个缓冲区来存储顶点的所有数据是否更好?

现在我有顶点数据数组(每个顶点的位置和颜色),并且我将它们推送到自己单独的缓冲区。

但是如果我使用 strideoffset,我可以将它们加入到一个数组中,但这会变得更困惑且更难以管理。

“传统”的做法是什么?

为每条数据提供单独的缓冲区感觉更加干净和有组织,但我认为它的效率较低。

效率的提高是否值得将其全部放入单个缓冲区中?

最佳答案

这个问题的答案高度依赖于使用情况。

如果您的所有顶点属性都高度不稳定或高度静态,您可能会受益于 interleaving并将它们放在一起,如评论中所述。

但是,如果一个属性比其他属性波动性大得多,则分离数据可以产生更好的性能。例如,如果您有一个网格,您经常更改顶点位置,但从不更改纹理坐标,则将它们分开可能会受益:您只需将位置重新上传到视频卡,而不是整套属性。 CPU 驱动的布料模拟就是一个例子。

它还依赖于硬件和实现。交错并不是在任何地方都有用,但我从未听说过它会产生负面影响。如果您可以使用它,您可能应该使用它。

但是,由于如果拆分属性就无法正确交错,因此您实际上是在比较两个未知数的性能影响。交错对您的目标硬件/驱动程序有帮助吗?您的数据会因分割而受益吗?第一个没有真正的答案。第二个是您和您的数据之间的问题。

就我个人而言,我建议仅使用交错的单 block 顶点属性,除非您有高度特化的需求。它降低了复杂性,而不是需要在同一后端将可能不同的系统混合在一起。

另一方面,就 C++ 中的内存寻址而言,设置交错是一项相当复杂的任务。如果您不是从头开始设计整个图形引擎,我真的怀疑您是否值得付出努力。但同样,这取决于您和您的应用程序。

但从理论上讲,仅仅将要上传到视频卡的数据分组在一起应该不会产生什么影响。由于减少了调用次数,将所有属性分组在一起可能会稍微更有效,但这又将高度依赖于驱动程序。

不幸的是,我认为你的问题的简单答案可以归结为:“这取决于”“没有人真正知道”

关于opengl - 多个缓冲区与单个缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756541/

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