OpenGL:将 Z 深度设置为统一与在顶点内冗余存储

OpenGL: Setting Z depth as a uniform vs. stored redundantly within vertices

OpenGL 中的 2D 渲染引擎通常使用四边形渲染 2D 图像,四边形包含 4 个顶点,每个顶点具有相同的 Z 深度。这些顶点通常由 (X, Y, Z) 和 (U, V) 组成,用于纹理坐标。

但是,由于任何给定图像的所有 4 个顶点都将始终占据相同的深度,因此最好只为每个顶点上传 (X, Y, U, V) 并将它们的 Z 深度设置为单独的制服着色器,或者在实践中每 4 个顶点更新统一的成本是否太大?

你绝对可以随心所欲地做。它不会产生一点可检测到的差异 - 当您将 运行 以几百万个片段着色器的顺序进行时,您对 4 个顶点所做的任何更改实际上都不可能对性能产生任何影响相同 4 个顶点着色器执行的实例。

就个人而言,我根本不为四边形使用属性 - 我使用顶点 ID 在 4 个固定值之间切换,这使我根本不必使用缓冲区。