gpt4 book ai didi

opengl - 为什么OpenGL不支持多索引缓冲?

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

为什么 OpenGL 还不支持顶点属性的多个索引缓冲区?

对我来说,这似乎非常有用,因为您可以重用属性,并且可以更好地控制几何图形的渲染。

所有属性数组都必须采用相同的索引是否有原因,或者此功能在不久的将来可以使用吗?

最佳答案

OpenGL(以及 D3D、Metal、Mantle、Vulkan)不支持此功能,因为硬件不支持此功能。硬件不支持这一点,因为对于绝大多数网格数据来说,这没有帮助。这主要对于主要不平滑的网格(顶点共享位置但不共享法线等)有用。大多数网格都是光滑的。

此外,它通常是内存与性能的权衡。访问顶点数据可能会更慢。与单个交错提取的情况相比,GPU 必须从内存中的两个不同位置进行提取。虽然缓存有所帮助,但多索引访问的缓存一致性比单索引访问更难控制。

由于这个原因,硬件不太可能支持这一点。但它也不太可能支持它,因为 you can do it yourself 。是否通过buffer textures , image load/storeSSBOs ,现在您可以随心所欲地获取顶点数据。既然你可以,硬件制造商就没有理由开发特殊的硬件来帮助你。

此外,还有一个问题是您是否真的会让顶点数据变得更小。在多索引渲染中,每个顶点都由一组索引定义。嗯,每个索引都占用空间。如果模型中的属性超过 64K(在许多情况下这并不是一个不合理的数字),那么每个索引将需要 4 个字节。

使用 GL_INT_2_10_10_10_REV 和标准化,可以以 4 个字节提供法线。 2D 纹理坐标也可以存储在 4 个字节中,就像一条短裤一样。颜色可以存储在 4 个字节中。因此,除非多个属性共享相同的索引(法线和纹理坐标边缘发生在同一位置,就像立方体上可能发生的那样),否则在许多情况下,通过这样做实际上会使数据更大

关于opengl - 为什么OpenGL不支持多索引缓冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44046585/

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