我目前正在使用 UBO 在 OpenGL 4.3 中进行渲染,以将我所有的常量数据存储在 GPU 上。(诸如材料描述、矩阵等之类的东西)。它可以工作,但是 UBO 的小尺寸(在我的实现中为 64kB)迫使我多次切换缓冲区减慢渲染速度,我正在寻找类似的方法来存储几 MB。
经过一番研究,我发现 SSBO 完全允许这样做,但也有不需要的“功能”:它们可以从着色器中写入,并且可能读取速度较慢。
是否有比 SSBO 更好的解决方案来向着色器提供大块数据?我觉得我遗漏了一些东西,为什么 UBO 应该限制在几 kB 而存在能够处理更多数据的更灵活的解决方案?如果着色器存储缓冲区是我正在寻找的,有没有办法确保它们不被着色器修改?