每个索引缓冲区绑定点(以及 OpenGL 中的几乎每种绑定)都有一个实现定义的可用绑定索引的最大数量。这表示硬件在任何一次渲染操作期间可以以这种方式使用的缓冲区的最大数量。
此外,对于缓冲区支持的接口块,有一个实现定义的可由各个着色器阶段使用的最大块数。请注意,这些最大值是为每个着色器阶段单独指定的。一次渲染操作中可以使用的总数通常是(但不要求是)每个着色器阶段中可以使用的数量的总和。
对于 UBO,每级数量必须至少为 14,合并计数必须为 14 * 6(每个着色器阶段一个)。某些硬件支持 15,但没有硬件支持更多。
对于 SSBO,每级数量只需为 8,即使如此,也仅需要片段和计算着色器具有任何此类绑定点。也就是说,一个实现可以支持 SSBO,但不需要在每个阶段都支持它们;只是片段和计算阶段。
SSBO 绑定点的数量有更多变化。但即便如此,它的最大绑定数也为 64。
因此,除非缓冲区的数量非常小,否则无法仅绑定所有内容并让着色器进行选择。这很好,因为绑定缓冲区的成本通常低于更改着色器的成本。更改缓冲区比更改着色器更好。
| 归档时间: |
|
| 查看次数: |
1022 次 |
| 最近记录: |