着色器存储块与统一块

时间:2014-07-11 08:16:58

标签: c++ glsl

我现在已经读过,您无法写入统一块,因此着色器存储块优于统一块。此外,着色器存储块的大小(上限)要高得多。

我没有得到的是着色器存储块的原子操作属性,什么时候可以变得方便?有真实的例子吗?

此外,当我更喜欢一个而不是另一个?

1 个答案:

答案 0 :(得分:4)

我认为你的问题不合适。听起来你正试图找出统一缓冲区和着色器存储缓冲区之间的区别。块只是组织着色器输入和输出的一种方式。

如您所述,统一缓冲区和着色器存储缓冲区之间的最大区别在于您可以从着色器程序写入着色器存储缓冲区。

问为什么写ssbo很方便就像问为什么变量很方便。无论何时想要在渲染过程之间累积结果或共享数据,都可以使用ssbo作为"暂存内存"。

在过去(我相信)如果你想共享数据,你将不得不对纹理进行渲染,并且这将完成整个图形管道并承担所有成本。

更多关于统一缓冲区对象的信息:

https://www.opengl.org/wiki/Shader_Storage_Buffer_Object

要确保您了解其中的差异,请按时间顺序查找为着色器提供数据的各种方法:

  • 纹理&帧缓冲对象
  • 制服
  • 统一缓冲区对象
  • 纹理缓冲对象
  • 带图像加载/存储的纹理
  • 着色器存储缓冲区对象

关于SO的这个答案对几乎所有这些都有很好的概述:

Passing a list of values to fragment shader